限制WHERE col IN(…)条件
我使用下面的代码:
SELECT * FROM table WHERE Col IN (123,123,222,....)
但是,如果我在IN
子句中放入超过3000个数字,SQL会引发错误。
有谁知道是否有一个大小限制或类似的东西?
根据您使用的数据库引擎的不同,指令的长度可能会有限制。
SQL Server有一个非常大的限制:
http://msdn.microsoft.com/en-us/library/ms143432.aspx
ORACLE在另一端有一个很容易达到的限制。
因此,对于大的IN子句,最好创build一个临时表,插入值并进行JOIN。 它也工作得更快。
有一个限制,但是你可以将你的值拆分成in()
Select * From table Where Col IN (123,123,222,....) or Col IN (456,878,888,....)
根据您的版本,在2008年使用表值参数,或者在这里描述一些方法:
SQL Server 2005中的数组和列表
你做错了。
参数化您的查询,并使用表值parameter passingID。
例如,您可以定义以下types
CREATE TYPE IdTable AS TABLE (Id INT NOT NULL PRIMARY KEY)
并有以下存储过程
CREATE PROCEDURE sp__Procedure_Name @OrderIDs IdTable READONLY, AS SELECT * FROM table WHERE Col IN (SELECT Id FROM @OrderIDs)
为什么不做一个子select…
预先查询到一个临时表或东西…
CREATE TABLE SomeTempTable AS SELECT YourColumn FROM SomeTable WHERE UserPickedMultipleRecordsFromSomeListOrSomething
然后…
SELECT * FROM OtherTable WHERE YourColumn IN ( SELECT YourColumn FROM SomeTempTable )
你可以像这样使用元组:SELECT * FROM table WHERE(Col,1)IN((123,1),(123,1),(222,1),….)
这些数字没有限制。 它比较对。