【问题标题】:Fastest Way to get Data From Array Into SQLServer Database?从数组中获取数据到 SQL Server 数据库的最快方法是什么?
【发布时间】:2010-10-01 05:41:02
【问题描述】:

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

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

【问题讨论】:

    标签: .net sql-server


    【解决方案1】:
    • 在 winforms 应用程序的数据表中显示数据。
    • 将数据复制到 Excel(或 OpenOffice Calc)中。
    • 保存文件。
    • 使用数据导入工具将数据拉入并映射字段。

    您将在 15 分钟内完成。

    编辑:呃,这可能不适用于 100k 行。但在您进行更复杂的操作之前,它快速、简单且值得一试。

    【讨论】:

      【解决方案2】:

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

      编辑:如下面的 cmets 所述,将 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
      

      【讨论】:

      • 您知道SQL Server 可以直接将XML 读入表中吧?不需要解析 XML 的存储过程。查看 sp_xml_preparedocument。
      • sp_xml_preparedocument 是我们使用的。但我认为前面的“sp”代表存储过程,因此表明它确实是一个存储过程。我就是一时想不起来名字。感谢您的澄清。
      【解决方案3】:

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

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

      【讨论】:

      • 谢谢,这正是我想要的!
      【解决方案4】:

      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
      ...
      

      考虑到您的大型数据集,不妨试试看会发生什么。

      【讨论】:

      • 这对于较少的行数是可以的,但是对于 100,000 行的批量加载会更快。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多