2011-07-13 6 views
5

Me preguntaba si hay un límite en una serie de instrucciones SELECT UNION que puedo enviar a un servidor SQL. Puedo tener hasta 36 hechos en una declaración de SQL, por lo que se vuelve bastante largo, en cuanto a los caracteres. (También cada una de esas instrucciones SELECT es un tanto complejo por sí mismo con el caso cuando las declaraciones en el mismo.)SQL Server: ¿Cuál es el límite en el número de UNIONs?

+0

¿Qué versión de SQL por favor? –

Respuesta

12

De SQL 2008 BOL

"Cualquier número de operadores UNION puede aparecer en una instrucción de Transact-SQL"

también desde MSDN "Especificaciones de capacidad máxima para SQL Server" (2008):

tamaño del lote (1) Tamaño65.536 * Red de paquetes

longitud de una cadena que contiene instrucciones SQL (tamaño de lote) (1)65.536 * tamaño de paquete de red

(1) paquete de red tamaño es el tamaño de la secuencia de datos tabular (TDS) paquetes utiliza para comunicarse entre las aplicaciones y el Motor de base de datos relacional. El tamaño del paquete predeterminado es de 4 KB y está controlado por la opción de configuración de tamaño de paquete de red.

En mi opinión, eso significa 268,435,456 bytes cuando se utilizan los valores predeterminados. Por favor, diga que su consulta es más corta que eso.

+0

+1, pero el enlace sería bueno también ... – gbn

+0

@gbn - enlace agregado. –

+0

[Editar] Hola, en la nota lateral.¿Hay un límite en la longitud de la declaración SQL en sí? – ahmd0

2

De acuerdo con este post en algún lugar entre 8000 y 16000, para esta consulta en particular. Probablemente esté gobernado principalmente por los recursos disponibles para su SQL Server.

Puede valer la pena hacer otra pregunta sobre el caso particular que tiene para un método alternativo que no necesita tantas uniones.

+1

+1 Buen punto. Sospecho que si tienes que hacer muchos UNIONES entonces hay algo mal con tu estructura de datos o consulta. –

+0

¿36 son demasiados? – ahmd0

+0

Es un poco, probablemente significa que hay una mejor manera de hacer lo que sea. Depende de la circunstancia, pero vale la pena preguntar (o buscar preguntas anteriores). –

3

Nigromancia, porque ahora sé la respuesta de la vida real.

Técnicamente, como dijo Neil Moss,> 268 millones de bytes (caracteres ASCII), o> 134 millones de caracteres UTF-16.

Sin embargo, existe un límite de "256 tablas por instrucción SELECT".

Y si bien se puede utilizar más de 256 tablas en una consulta CON Declaraciones de la Unión, dicha consulta no se puede utilizar como una función de vista, con valores de tabla o como una sub consulta para una instrucción SELECT.

Además, si utiliza una consulta de este tipo directamente, puede alcanzar el límite de espacio de la pila del optimizador de consultas en aproximadamente 1'300-1'500 SELECT.

Lo sé, porque gracias a un gran (advertencia - sarcasmo) OCP (código original "programador"), tenemos ese esquema af * ed up, y en realidad encontré ambos, el 256 y el 1'300 - 1'500 límite.

(una tabla por tipo de objeto, en caso de que alguien se pregunta; con exactamente la misma columna esquema (pero no los nombres) según la tabla - en lugar de una tabla de referencia con el tipo de objeto ...)

Cuestiones relacionadas