Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Sql server 2005 我应该使用SqlBulkCopy还是存储过程来导入数据_Sql Server 2005_C# 4.0_Bulk Load - Fatal编程技术网

Sql server 2005 我应该使用SqlBulkCopy还是存储过程来导入数据

Sql server 2005 我应该使用SqlBulkCopy还是存储过程来导入数据,sql-server-2005,c#-4.0,bulk-load,Sql Server 2005,C# 4.0,Bulk Load,我有一个248MB的日志文件,它可以扩展到GB。因此,您可以想象可以有多少行。我需要将所有行导入SQL Server数据库中的一个表中。为此,我首先创建一个DataTable,并将日志文件中的所有行作为新行添加到该DataTable中。这种情况发生得相当快。超过一百万条记录在大约30秒内被添加到表中。在用行填充表之后,我使用存储过程将DataTable中的记录导入数据库。然而,这一阶段的执行非常繁重。现在我想知道,是应该使用SqlBulkCopy WriteToServer方法,还是应该继续使用

我有一个248MB的日志文件,它可以扩展到GB。因此,您可以想象可以有多少行。我需要将所有行导入SQL Server数据库中的一个表中。为此,我首先创建一个DataTable,并将日志文件中的所有行作为新行添加到该DataTable中。这种情况发生得相当快。超过一百万条记录在大约30秒内被添加到表中。在用行填充表之后,我使用存储过程将DataTable中的记录导入数据库。然而,这一阶段的执行非常繁重。现在我想知道,是应该使用SqlBulkCopy WriteToServer方法,还是应该继续使用这种方法?如果SqlBulkCopy是一个更好的选择,那么我应该使用DataTable或IDataReader版本。提前感谢。

我会使用SqlBulkCopy来导入任何像这样的实际卷的数据。与SqlDataAdapter相比,性能差异可能很大。e、 g.I作为导入10万行的性能比较:

SqlBulkCopy:1.5885s
SqlDataAdapter:25.0729s

如果将TableLock选项与SqlBulkCopy一起使用,您可以获得更大的吞吐量,在我的测试中,该选项将导入降低到0.8229s


还值得注意的是,使用SqlBulkCopy,您可以让多个实例并行地将一段数据大容量加载到同一个目标表中,而不会相互冲突。为另一个道歉,但我认为这是相关的。这是关于加载到堆表中,无索引,以获得最佳性能,这可能不是当前场景的选项,但绝对值得了解。

对于任何实际卷的数据导入,我都会选择SqlBulkCopy。与SqlDataAdapter相比,性能差异可能很大。e、 g.I作为导入10万行的性能比较:

SqlBulkCopy:1.5885s
SqlDataAdapter:25.0729s

如果将TableLock选项与SqlBulkCopy一起使用,您可以获得更大的吞吐量,在我的测试中,该选项将导入降低到0.8229s


还值得注意的是,使用SqlBulkCopy,您可以让多个实例并行地将一段数据大容量加载到同一个目标表中,而不会相互冲突。为另一个道歉,但我认为这是相关的。这是关于加载到堆表中,无索引,以获得最佳性能,这可能不是您当前场景的选项,但绝对值得了解。

由于您对SqlBulkCopy进行了大量实践,您可能知道为什么会出现“超时过期。在完成之前超时时间已过…”错误。我将连接超时时间增加到600秒。但我在不到半分钟的时间内就发现了错误。请尝试在SqlBulkCopy上设置BulkCopyTimeout(以秒为单位):非常感谢@AdaTheDev。你救了我很多钱time@AdaTheDev因此,您的答案和博客文章通过SqlDataAdapter比较了SqlBulkCopy和一系列insert语句,但存储过程呢?我可以将一个数据表作为自定义类型发送出去,并执行SELECT FROM INTO(或INSERT INTO FROM,我总是将这两个向后)。此时,我将作为单个SQL集操作执行插入。SqlBulkCopy在这里更好吗?如果是,原因是什么?@AVu-我去年写了一篇更新的博客文章,比较了不同数量的行,以及多线程与单线程:由于您对SqlBulkCopy进行了大量实践,您可能知道我为什么会出现“超时过期。在完成之前超时时间已过…”错误。我将连接超时时间增加到600秒。但我在不到半分钟的时间内就发现了错误。请尝试在SqlBulkCopy上设置BulkCopyTimeout(以秒为单位):非常感谢@AdaTheDev。你救了我很多钱time@AdaTheDev因此,您的答案和博客文章通过SqlDataAdapter比较了SqlBulkCopy和一系列insert语句,但存储过程呢?我可以将一个数据表作为自定义类型发送出去,并执行SELECT FROM INTO(或INSERT INTO FROM,我总是将这两个向后)。此时,我将作为单个SQL集操作执行插入。SqlBulkCopy在这里更好吗?如果是,为什么?@AVu-我去年写了一篇更新的博客文章,比较了不同数量的行,以及多线程与单线程: