sql - length - Límite en la condición WHERE col IN(...)
sql server database size limit (6)
Estoy usando el siguiente código:
SELECT * FROM table
WHERE Col IN (123,123,222,....)
Sin embargo, si pongo más de ~ 3000 números en la cláusula IN
, SQL arroja un error.
¿Alguien sabe si hay un límite de tamaño o algo similar?
¿Por qué no hacer un where IN en una sub selección?
Pre-consulta en una tabla temporal o algo ...
CREATE TABLE SomeTempTable AS
SELECT YourColumn
FROM SomeTable
WHERE UserPickedMultipleRecordsFromSomeListOrSomething
entonces...
SELECT * FROM OtherTable
WHERE YourColumn IN ( SELECT YourColumn FROM SomeTempTable )
Dependiendo de su versión, use un parámetro valuado en la tabla en 2008, o algún enfoque descrito aquí:
Hay un límite, pero puedes dividir tus valores en bloques separados de in ()
Select *
From table
Where Col IN (123,123,222,....)
or Col IN (456,878,888,....)
Lo estas haciendo mal.
Parametrice su consulta y pase los identificadores usando un parámetro de valor de tabla .
Por ejemplo, podría definir el siguiente tipo
CREATE TYPE IdTable AS TABLE (Id INT NOT NULL PRIMARY KEY)
Y tenga el siguiente procedimiento almacenado
CREATE PROCEDURE sp__Procedure_Name
@OrderIDs IdTable READONLY,
AS
SELECT *
FROM table
WHERE Col IN (SELECT Id FROM @OrderIDs)
Puede usar tuplas como esta: SELECCIONAR * FROM table WHERE (Col, 1) IN ((123,1), (123,1), (222,1), ....)
No hay restricciones en el número de estos. Compara pares.
Según el motor de base de datos que esté utilizando, puede haber límites en la duración de una instrucción.
SQL Server tiene un límite muy grande:
http://msdn.microsoft.com/en-us/library/ms143432.aspx
ORACLE tiene un límite muy fácil de alcanzar en el otro lado.
Entonces, para las cláusulas IN grandes, es mejor crear una tabla temporal, insertar los valores y hacer un JOIN. Funciona más rápido también.