jDe*_*per 63 sql t-sql sql-server
我正在使用以下代码:
SELECT * FROM table
WHERE Col IN (123,123,222,....)
Run Code Online (Sandbox Code Playgroud)
但是,如果我在IN子句中放入超过~3000个数字,则SQL会抛出错误.
有谁知道是否有尺寸限制或类似的东西?!!
tek*_*ues 66
根据您使用的数据库引擎,可能会限制指令的长度.
SQL Server有一个非常大的限制:
http://msdn.microsoft.com/en-us/library/ms143432.aspx
ORACLE在另一方面很容易达到限制.
因此,对于大型IN子句,最好创建临时表,插入值并执行JOIN.它的工作速度也更快.
Iai*_*ult 33
有一个限制,但您可以将值拆分为in()的单独块
Select *
From table
Where Col IN (123,123,222,....)
or Col IN (456,878,888,....)
Run Code Online (Sandbox Code Playgroud)
Gre*_*reg 12
参数化查询并使用表值参数传递ID .
例如,定义以下类型:
CREATE TYPE IdTable AS TABLE (Id INT NOT NULL PRIMARY KEY)
Run Code Online (Sandbox Code Playgroud)
连同以下存储过程:
CREATE PROCEDURE sp__Procedure_Name
@OrderIDs IdTable READONLY,
AS
SELECT *
FROM table
WHERE Col IN (SELECT Id FROM @OrderIDs)
Run Code Online (Sandbox Code Playgroud)
为什么不做一个 where IN 子选择...
预查询到临时表或其他东西......
CREATE TABLE SomeTempTable AS
SELECT YourColumn
FROM SomeTable
WHERE UserPickedMultipleRecordsFromSomeListOrSomething
Run Code Online (Sandbox Code Playgroud)
然后...
SELECT * FROM OtherTable
WHERE YourColumn IN ( SELECT YourColumn FROM SomeTempTable )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92932 次 |
| 最近记录: |