日期:2014-05-17  浏览次数:20506 次

select语句中的in运算
select语句中where后用in运算时,in运算中最多支持多少参数?
我有条语句,判断操作员对哪些部门具有数据操作权时,用了in运算。当部门很多时,系统报错。我前端是用PB9开发的.
------解决方案--------------------
MSSQL木限制。 IN里面的东西过多可以弄成表。
------解决方案--------------------
在 IN 子句中包括数量非常多的值(数以千计)可能会消耗资源并返回错误 8623 或 8632。若要解决这一问题,请将这些项存储于某个表的 IN 列表中。

错误 8623:

查询处理器用尽了内部资源,无法生成查询计划。这种情况很少出现,只有在查询极其复杂或引用了大量表或分区时才会出现。请简化查询。如果您认为该消息的出现纯属错误,请与客户支持服务部门联系,了解详细信息。

错误 8632:

内部错误: 达到了表达式服务限制。请在您的查询中查找潜在的复杂表达式,并尝试简化它们。

------解决方案--------------------
这个你可以先输出改sql,然后再mssql忠执行是否成功。
------解决方案--------------------

数据操作权 in ('操作权1','操作权2','操作权3','操作权4','操作权5')



------解决方案--------------------
是不是部门很多时,传递到数据库执行的SQL语句,超出了最大长度了。用openquery 或者用exec执行那么就会出错。
------解决方案--------------------
直接写的时候貌似没啥问题,但是我试过在存储过程里面调用的时候传一大串到in里面会报错,说执行计划过于复杂,后来我是把那串先换成一个表变量存进去,问题就解决了。