sql >> Base de Datos >  >> RDS >> Sqlserver

¿Tamaño máximo para una consulta de SQL Server? Cláusula IN? ¿Hay un mejor enfoque

Cada lote de SQL tiene que caber en el Límite de tamaño de lote:65 536 * Tamaño de paquete de red.

Aparte de eso, su consulta está limitada por las condiciones de tiempo de ejecución. Por lo general, se quedará sin tamaño de pila porque x IN (a,b,c) no es más que x=a O x=b O x=c, lo que crea un árbol de expresión similar a x=a O (x=b O (x =c)), por lo que se vuelve muy profundo con una gran cantidad de OR. SQL 7 alcanzaría un SO en alrededor de 10k valores en IN, pero hoy en día las pilas son mucho más profundas (debido a x64), por lo que puede llegar bastante lejos.

Actualizar

Ya encontró el artículo de Erland sobre el tema de pasar listas/matrices a SQL Server. Con SQL 2008, también tiene parámetros de valores de tabla que le permiten pasar un DataTable completo como un único parámetro de tipo de tabla y unirse a él.

XML y XPath son otra solución viable:

SELECT ...
FROM Table
JOIN (
   SELECT x.value(N'.',N'uniqueidentifier') as guid
   FROM @values.nodes(N'/guids/guid') t(x)) as guids
 ON Table.guid = guids.guid;