sql查询中的最大参数数
有一段时间我会尝试使用LINQ。 枚举集合并在我的代码中更改其某些属性的典型方法如下所示:
ATDataContext dc = new ATDataContext(Settings.connection_string); int[] col = ListViewClass.getListViewSelectedPositionTags(listView); try { foreach (var item in col) { var ctx = (from r in dc.MailingLists where r.ID == item select r).Single(); ctx.Excluded = 'Y'; ctx.ExcludedComments = reason; } dc.SubmitChanges(); }
有一段时间有一个建议来做到这一点…似乎更聪明的方式:
var ctx = from r in dc.MailingLists where col.Contains(r.ID) select r; foreach (var item in ctx) { item.Excluded = 'Y'; item.ExcludedComments = reason; } dc.SubmitChanges();
Iit在很多层面上都很有意义,我喜欢这个解决方案。 它比第一个更聪明,更快捷。
我已经在生产环境中使用过这个解决方案一段时间了。
几周后搜索应用程序日志文件时我感到惊讶,看到这个:
“传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。此RCP请求中提供的参数太多。最大值为2100.”
LINQ to SQL将where col.Contains(r.ID)
转换为IN
子句,如下所示:
ID IN(@ p1,@ p1,@ p2 ……)
col
集合达到(在我的情况下)超过2100个元素,并且查询无法执行。 我已经对这个问题做了一些研究,最后我得到了:
“… sql查询中的最大参数数量是2100.还有更多限制,例如整个查询字符串不能超过8044个字符。”
我非常喜欢第二种解决方案。 我对SQL Server的这些硬编码限制感到非常失望。
我错过了什么? 有什么我可以做的,以便能够使用“where col.Contains(r.ID)”版本?
关心马里乌斯
PS。 (我使用Win XP,C#with LINQ和SQL 2005 Express)。
限制是硬编码的 :
我之前编写了一些代码,将Contains
查询拆分为批次并合并结果… 请参阅此处了解更多信息 。
上述就是C#学习教程:sql查询中的最大参数数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/986631.html