回答

收藏

SQLCommand ExecuteNonQuery最大CommandText长度?

技术问答 技术问答 95 人阅读 | 0 人回复 | 2023-09-13

我已经在互联网上搜索了,所有内容似乎都与单个字段有关,或者只做了一个插入。我有一个迁移工具,它可以从旧的遗留数据库(超数据库)迁移到我们的SQL( Y& m1 P' T% B# g+ A
ServerDB(2008)。目前,我正在从旧数据库中读取20,000条记录,并生成一个大SQLCommand.CommandText字符串,其中包含以分号分隔的20,000条插入语句。
; q1 s) {2 G2 s这很好用
# |" q* W* c6 i/ ?5 K0 \3 j。但是我可以25k吗?30k?我尝试完全没有任何限制,但是当我尝试ExecuteNonQuery使用CommandText包含超过400万条INSERT语句,它说的太长了。很抱歉,我不记得确切的错误消息。我找不到有关确切限制的任何文档。对我来说很重要,因为一次可以插入的插入物越多,整个过程就越快。任何建议/链接/文档将不胜感激,谢谢!
3 M. _4 R8 R7 d3 V! [& O                ) e/ b/ d- ~, j7 s, J; G% {
解决方案:4 ?. ]1 x& x2 [, Q: p
               
) L, l3 q9 z) @9 C3 p1 l2 H( J& B, M6 x7 |

3 ~, H# N5 N; m& h  R                它取决于SQL Server版本。
- w9 J& n9 @$ ^+ j( V6 Xhttp://technet.microsoft.com/zh-
, Q, N$ m' T! I5 Y0 y; ICN/library/ms143432.aspx
  E2 ]" M9 e* G& v- N对于SQL Server 2012,批处理大小或SQL语句(字符串)= 65,536 *网络数据包大小。
' y5 D/ q6 U5 g* P5 M. _5 H6 r网络数据包大小是用于在应用程序和关系数据库引擎之间进行通信的表格数据流(TDS)数据包的大小。默认数据包大小为4 KB,由网络数据包大小配置选项控制。  k) Y: d1 g4 ?9 V
简而言之,64K x 4K = 256 MB。同样,这假设您使用的是默认数据包大小。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则