【发布时间】:2011-05-27 20:43:15
【问题描述】:
我正在使用 sqlcmd 运行 SQL 文件,该文件将许多行插入 MS SQL 服务器(2008 R2),执行 BULK INSERT 将是最佳选择,但 SQL 服务器可能无法访问数据文件。
在 MS SQL Server 2008 R2 上还有哪些其他方式或选项可以(非常)快速插入?
【问题讨论】:
我正在使用 sqlcmd 运行 SQL 文件,该文件将许多行插入 MS SQL 服务器(2008 R2),执行 BULK INSERT 将是最佳选择,但 SQL 服务器可能无法访问数据文件。
在 MS SQL Server 2008 R2 上还有哪些其他方式或选项可以(非常)快速插入?
【问题讨论】:
最终编写了一个使用System.Data.SqlClient.SqlBulkCopy 的自定义C# 应用程序。还将包含数据的 SQL 文件替换为 System.Data.DataTable.WriteXml 生成的 XML 文件,以后可以使用 ReadXml 导入并直接与 SqlBulkCopy 一起使用。
这个解决方案比使用普通的INSERTs 快大约 10 倍,比使用每个 1000 行的插入快 50 倍。 (为什么每条语句插入多行值比每条插入一条语句慢得多,这对我来说是个谜。)
【讨论】:
您也可以使用 bcp 实用程序。我发现它比 BULK INSERT 语句更快、更容易使用。唯一需要注意的是,您可能需要在服务器本身上运行它并将文件放在服务器可访问的共享目录中。不太确定你是否真的需要这样做。
【讨论】:
bcp 看起来不错,但我没有找到任何关于它如何处理数据、二进制数据、空值中存在的字段/行分隔符的信息。因此,DataTables WriteXml 似乎以这种方式更加健壮。