Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何最有效地在SQL Server中插入/更新数百万行?_C#_Sql_Insert_Bigdata - Fatal编程技术网

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

C# 如何最有效地在SQL Server中插入/更新数百万行?,c#,sql,insert,bigdata,C#,Sql,Insert,Bigdata,我有一个程序正在读取文本文件以更新/插入行。我尝试了下面的伪代码方法。这些都非常缓慢。我直接在SQL Server上运行这段代码,这些过程都需要很多小时才能完成 update/insert语句的数量约为数百万。在.net c#中运行这么多SQL语句最有效的方法是什么 或者 或者 // Build a list and run 1000 statements at one time While (reader.read) { List.Add(sql); if(List.Count =

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

update/insert语句的数量约为数百万。在.net c#中运行这么多SQL语句最有效的方法是什么

或者

或者

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

使您能够高效地大容量加载SQL Server表,其中包含来自的数据 另一个来源

Microsoft SQL Server包括一个名为 用于将数据从一个表移动到另一个表的bcp,无论是在单个表上 服务器或服务器之间。SqlBulkCopy类允许您编写 提供类似功能的托管代码解决方案

有 将数据加载到SQL Server表中的其他方法(INSERT语句, 例如),但是SqlBulkCopy提供了显著的性能 优于它们。SqlBulkCopy类可用于写入数据 仅适用于SQL Server表。但是,数据源不受限制 到SQL Server;可以使用任何数据源,只要数据可以 加载到DataTable实例或使用IDataReader实例读取。

使用

使您能够高效地大容量加载SQL Server表,其中包含来自的数据 另一个来源

Microsoft SQL Server包括一个名为 用于将数据从一个表移动到另一个表的bcp,无论是在单个表上 服务器或服务器之间。SqlBulkCopy类允许您编写 提供类似功能的托管代码解决方案

有 将数据加载到SQL Server表中的其他方法(INSERT语句, 例如),但是SqlBulkCopy提供了显著的性能 优于它们。SqlBulkCopy类可用于写入数据 仅适用于SQL Server表。但是,数据源不受限制 到SQL Server;可以使用任何数据源,只要数据可以 加载到DataTable实例或使用IDataReader实例读取。


如果批量插入不是一个选项,那么您可以创建临时表并通过XML执行所有批量插入操作。这非常简单、快速和高效。如果批量插入不是一个选项,那么您可以创建临时表并通过XML执行所有批量插入操作。这也非常简单、快速和高效well@shaolinmonk,您不能将其用于更新,据我所知,您必须在临时表中插入数据,然后进行更新。请看:@sullimonk,您不能将其用于更新,据我所知,您必须在临时表中插入数据,然后进行更新。见:和
// 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();
   }
}