限制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),….)

这些数字没有限制。 它比较对。