SQLCommand ExecuteNonQuery最大CommandText长度?

时间:2014-01-27 20:04:52

标签: c# sql sql-server database sqlcommand

我在互联网上搜索过,一切似乎都是关于个别字段或做一个插入。我有一个迁移工具,它从旧的遗留数据库(superbase)迁移到我们的SQL服务器数据库(2008)。目前,我正从旧数据库中读取20,000条记录,并生成一个大的SQLCommand.CommandText字符串,其中包含由分号分隔的20,000个插入语句。 这很好用。但我可以做25k吗? 30K?我试着没有任何限制,但当我试图用ExecuteNonQuery运行包含超过400万个INSERT语句的CommandText时,它说了一些关于太久的事情。我不记得确切的错误信息,抱歉。我找不到有关确切限制的任何文档。对我来说很重要,因为我可以一次点火的插入越多,整个过程就越快。任何建议/链接/文档将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:5)

这取决于SQL Server版本。

http://technet.microsoft.com/en-us/library/ms143432.aspx

对于SQL Server 2012,批处理大小或SQL语句(字符串)= 65,536 *网络包大小。

网络数据包大小是用于在应用程序和关系数据库引擎之间进行通信的表格数据流(TDS)数据包的大小。默认数据包大小为4 KB,由网络数据包大小配置选项控制。

简而言之,64K x 4K = 256 MB。同样,这假设您使用的是默认数据包大小。

答案 1 :(得分:0)

简短的bing搜索向我展示了这个链接:http://dbaspot.com/sqlserver-programming/399616-what-max-length-sqlcommand-commandtext.html

它说:

  

查询批处理的最大大小为65536 *网络包大小。该   默认数据包为4096字节,其上限为2.68亿   字节。

目前还不清楚是否会对不同版本的sql server进行更改。