繁体   English   中英

如何最有效地在SQL Server中插入/更新几百万行?

[英]How to most efficiently insert/update a few million rows in SQL Server?

我有一个程序正在读取文本文件以更新/插入行。 我在下面尝试了以下伪代码方法。 这些都非常慢。 我直接在SQL Server本身上运行此代码,这些过程都需要很多小时才能完成...

更新/插入语句的数量约为数百万。 在.net c#中运行那么多SQL语句的最有效方法是什么?

// Insert/Update while reading text file
While (reader.read)
{
   sql.ExecuteNonQuery();
}

要么...

// build a list to loop through later and insert/update
While (reader.read)
{
   List.Add(sql);
}

foreach(string s in sql)
{
   sql.ExecuteNonQuery();
}

要么...

// Build a list and run 1000 statements at one time
While (reader.read)
{
   List.Add(sql);
   if(List.Count == 1000)
   {
      sql.ExecuteNonQuery();
   }
}

使用SqlBulkCopy类

使您可以有效地用另一个来源的数据批量加载SQL Server表。

Microsoft SQL Server包括一个流行的命令提示符实用程序bcp,用于将数据从一个表移动到另一个表,无论是在单个服务器上还是在服务器之间。 SqlBulkCopy类使您可以编写提供类似功能的托管代码解决方案。

还有其他方法可以将数据加载到SQL Server表中(例如,INSERT语句),但是SqlBulkCopy相对于它们具有显着的性能优势。 SqlBulkCopy类可用于仅将数据写入SQL Server表。 但是, 数据源不限于SQL Server。 只要可以将数据加载到DataTable实例或使用IDataReader实例读取,就可以使用任何数据源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM