从数组中获取数据到SQLServer数据库的最快方法?

时间:2009-01-13 20:21:26

标签: .net sql-server

问题:如何最有效地将数据从数组移动到SQL Server表中。

详细信息:我在WinForms应用程序的内存中创建了一个包含许多行(通常约为100,000)和许多列(约40个)的数组。我需要以尽可能最快的方式将此数组放入相应的SQL Server表中。现在,我正在创建一个SqlCommand对象,循环遍历我的数组中的100,000行,并为每一行分配命令对象的40个参数,然后调用ExecuteCommand。它有效,但速度很慢,肯定不是最有效的方法。我应该将数组中的所有数据放入DataTable,然后以某种方式一次性发送数据表(我不知道该怎么做)?还是其他一些技巧?写出一个文件并使用bcp(似乎不会更快,我没有尝试过)。任何建议表示赞赏!

4 个答案:

答案 0 :(得分:5)

SqlBulkCopy。如果你可以将这些东西作为DataTable存储在内存中会更好,因为WriteToServer()方法的一个重载需要一个。

编辑:Here's an example如何使用API​​。

答案 1 :(得分:1)

我们将xml用于大数据批处理。将xml字符串传递给存储过程并让sp将xml分解为表。然后从临时表中选择进入您的数据库。似乎对我们很有效。

编辑:如下面的评论中所述,将xml转换为表的过程为sp_xml_preparedocument

declare @idoc int
exec sp_xml_preparedocument @idoc output, @input_xml
-- select into a tmp table from openxml(@idoc, 'xpath_to_your_data')
exec sp_xml_removedocument @idoc

答案 2 :(得分:1)

Pinal Dave前几天读了odd method of performing a bulk insert

INSERT INTO MyTable  (FirstCol, SecondCol)
    SELECT  'First' ,1
    UNION ALL
SELECT  'Second' ,2
    UNION ALL
SELECT  'Third' ,3
...

考虑到你的大数据集,可能只是想看看会发生什么。

答案 3 :(得分:0)

  • 在winforms应用中的数据表中显示数据。
  • 将数据复制到Excel(或OpenOffice Calc)中。
  • 保存文件。
  • 使用数据导入工具提取数据和映射字段。

你将在15分钟内完成。

编辑:呃,这可能不适用于100k行。但是在你去做一些更复杂的事情之前,它很快,很容易并且值得一试。