有人知道in子句的表达式列表(用于测试匹配)中的值数量的限制吗?
发布于 2014-01-17 06:26:39
是的,是有限度的,但是微软只指定它存在于“成千上万”中。
在括号中显式地包含大量值(由逗号分隔的数千个值),在in子句中可以使用资源并返回错误8623或8632。要解决此问题,请将项存储在表中的in列表中,并在IN子句中使用SELECT子查询。
详细地看一下这些错误,我们发现这个限制并不是特定于IN的,而是适用于一般的查询复杂性:
错误8623: 查询处理器耗尽了内部资源,无法生成查询计划。这是一个罕见的事件,只适用于引用大量表或分区的极其复杂的查询或查询。请简化查询。如果您认为您已错误地收到此消息,请与客户支持服务联系以获得更多信息。 错误8632: 内部错误:已达到表达式服务限制。请在查询中查找潜在的复杂表达式,并尝试简化它们。
发布于 2014-11-11 05:17:29
它不是特定的,但与超出内存限制的查询计划生成器有关。我可以确认有几千次错误,但可以先将值插入表中,然后将查询重新短语为
select * from b where z in (select z from c) 在in子句中您想要的值在表c中。我们成功地将它与一个100万值的in子句一起使用。
发布于 2014-01-17 05:30:11
根据所使用的数据库引擎,可以限制指令的长度。
Server有一个非常大的限制:
因此,对于大型IN子句,最好创建一个临时表,插入值并进行连接。它也工作得更快。
有一个限制,但可以将值拆分为独立的in()块。
Select *
From table
Where Col IN (123,123,222,....)
or Col IN (456,878,888,....)在2008年使用表值参数,或者这里描述的一些方法
https://stackoverflow.com/questions/21178390
复制相似问题