问题:如何最有效地将数据从数组移动到SQL Server表中。
详细信息:我在WinForms应用程序的内存中创建了一个包含许多行(通常约为100,000)和许多列(约40个)的数组。我需要以尽可能最快的方式将此数组放入相应的SQL Server表中。现在,我正在创建一个SqlCommand对象,循环遍历我的数组中的100,000行,并为每一行分配命令对象的40个参数,然后调用ExecuteCommand。它有效,但速度很慢,肯定不是最有效的方法。我应该将数组中的所有数据放入DataTable,然后以某种方式一次性发送数据表(我不知道该怎么做)?还是其他一些技巧?写出一个文件并使用bcp(似乎不会更快,我没有尝试过)。任何建议表示赞赏!
答案 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)
你将在15分钟内完成。
编辑:呃,这可能不适用于100k行。但是在你去做一些更复杂的事情之前,它很快,很容易并且值得一试。