Límite de la condición WHERE col IN (...)

Resuelto jDeveloper asked hace 15 años • 9 respuestas

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 INcláusula, SQL arroja un error.

¿Alguien sabe si hay un límite de tamaño o algo similar?

jDeveloper avatar Jul 01 '09 21:07 jDeveloper
Aceptado

Dependiendo del motor de base de datos que esté utilizando, puede haber límites en la longitud 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 cláusulas IN grandes, es mejor crear una tabla temporal, insertar los valores y hacer un JOIN. También funciona más rápido.

tekBlues avatar Jul 01 '2009 14:07 tekBlues

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,....)
Iain Hoult avatar Jul 01 '2009 14:07 Iain Hoult

Parametrice la consulta y pase los identificadores utilizando un parámetro con valores de tabla .

Por ejemplo, defina el siguiente tipo:

CREATE TYPE IdTable AS TABLE (Id INT NOT NULL PRIMARY KEY)

Junto con el siguiente procedimiento almacenado:

CREATE PROCEDURE sp__Procedure_Name
    @OrderIDs IdTable READONLY,
AS

    SELECT *
    FROM table
    WHERE Col IN (SELECT Id FROM @OrderIDs)
Greg avatar May 16 '2013 15:05 Greg