c# - SQLCommand ExecuteNonQuery 最大 CommandText 长度?

标签 c# sql sql-server database sqlcommand

我在互联网上进行了搜索,所有内容似乎都与个别字段有关或进行一次插入。我有一个迁移工具,可以从旧的遗留数据库 (superbase) 迁移到我们的 SQL Server DB (2008)。目前,我正在从旧数据库中读取 20,000 条记录并生成一个大的 SQLCommand.CommandText 字符串,其中包含 20,000 个由分号分隔的插入语句。 这很好用。但是我可以做25k吗? 3万?我尝试过完全不设置任何限制,但是当我尝试使用包含超过 400 万条 INSERT 语句的 CommandText 运行 ExecuteNonQuery 时,它说的是太长了。我不记得确切的错误消息,抱歉。我找不到任何关于确切限制的文档。找出答案对我来说很重要,因为我一次可以发射的插入物越多,整个过程就越快。非常感谢任何建议/链接/文档,谢谢!

最佳答案

这取决于 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。同样,这假设您使用的是默认数据包大小。

关于c# - SQLCommand ExecuteNonQuery 最大 CommandText 长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21390537/

相关文章:

sql - 如何获得次优值

sql - 如何通过SQL查询在组中添加选择?

sql - 如何防止 SQL 语法中排序规则影响表名?

c# - 如何将 SignalR hub 上下文传递到 ASP .NET Core 2.1 上的 Hangfire 作业?

c# - 如何使用 ASP.NET 网页安排在服务器上下载文件

mysql - 从表中获取一行并将其放在查询的第一个位置

sql-server - 如果在另一个表中找不到行,则将行插入到表中

c# - 打印机无法从 DeviceHub 接收作业

c# - MVC ActionFilterAttribute 但仅在主视图上

sql - 关于何时使用WITH RECOMPILE 选项的经验法则