sql-server – 由于WHERE子句中有超过100,000个条目,因此SQL Ser
我的问题(或至少是错误信息)与
query processor ran out of internal resources – extremely long sql query非常相似.
我的客户正在使用SQL select-query,其中包含where子句,其中包含100,000个条目. 查询失败,错误8632和错误消息
我发现这个错误消息被抛出非常奇怪,完全是100,000个条目,所以我想知道这是否是一个可配置的值.是这种情况,如果是,我怎样才能将此值增加到更高的值? 在MSDN,有重新重写查询的建议,但我想避免这种情况. 同时我发现我正在谈论的条目列表包含自然数,其中一些似乎是顺序的(类似于(1,2,3,6,7,8,9,10,12,13,15,16,17,18,19,20). 这使得SQL where子句类似于: where entry in (1,20) 我可以将其转换为: where (entry between 1 and 3) OR (entry between 6 and 10) OR (entry between 12 and 13) OR (entry between 15 and 20) 可以通过以下方式缩短: where entry in (1,...,20) ……或类似的东西? (我知道这是一个很长的镜头,但它会使软件更新更容易,更可读) 为了您的信息:where子句中的数据是计算的结果,在另一个表上完成:首先在开始时读取和过滤该表的条目,然后完成一些额外的处理(这是不可能的SQL),额外处理的结果是更多过滤,其结果用于where子句.由于无法在SQL中编写完整的过滤,因此使用了上述方法.显然,where子句的内容可能会在每次处理时发生变化,因此需要动态解决方案. 解决方法要搜索超过100,000个值,请将它们放在临时表中,每个值要搜索一行.然后,将您的查询加入该临时表进行过滤.超过100,000个值的东西不是参数 – 它是一个表.考虑Swart’s Ten Percent Rule,而不是考虑提高限制,如果你接近SQL Server限制的10%,你可能会遇到不好的时间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |