2012-02-08 30 views
13

¿Cuál es la longitud máxima de una instrucción SQL en SQL Server? ¿Esta longitud depende de la versión de SQL Server?¿Cuántos caracteres puede tener una sentencia de SQL Server SQL?

Por ejemplo, en

DECLARE @SQLStatement NVARCHAR(MAX) = N'Something' 
EXEC(@SQLStatement) 

la @SQLStatement se le permite ser X caracteres de largo. ¿Qué es X?

+3

¿Cuántas necesita? – Dave

+2

Depende de lo que es la declaración de SQL ... o tal vez no entiendo esta pregunta – abney317

+0

Supongo que el número máximo? No tome los comentarios arriba demasiado en serio ... –

Respuesta

13

que va a ser 65.536 veces su tamaño de paquete de red, de acuerdo con the documentation

Parece que este es el mismo al menos desde SQL Server 2005

+2

Y la gente votó negativamente pensando que era estúpido y entonces Microsoft realmente no impondría un límite de longitud en una declaración SQL .. HA. Buena pregunta, Sohell Farahany. –

+2

@Evan - Sí, la pregunta no era del todo clara, así que creo que la mayoría de la gente no entendía que preguntaba por el tamaño máximo de la consulta (al menos eso es lo que creo que está pidiendo) –

+0

gracias a todos por su comprensión mi Q. –

1

La longitud de una instrucción SQL debe ser como lo más corto posible mientras se mantiene la comprensión humana.

Dado que el análisis sintáctico y la compilación de la instrucción SQL en un trabajo real para el motor de la base de datos es muy rápido, la longitud de la instrucción realmente no le importa al analizador. De mucha más importancia, especialmente para una declaración SQL construida a mano, es que un humano puede mantener esa declaración en el futuro.

+0

Buena respuesta, pero parece que el OP tenía un problema de barrera de idioma y en realidad quería preguntar cuál era la longitud _max_ de una instrucción SQL. He actualizado la pregunta para reflejar esto, lo siento por hacerte parecer loco. – Pops

+1

Esta es una declaración falsa. Hay muchos casos de uso para consultas generadas dinámicamente. La "comprensión humana" es bastante subjetiva, pero podemos suponer que lo que quiere decir se entiende en un par de minutos o menos, lo cual tampoco es necesario. Creo que su comentario probablemente solo esté considerando consultas estáticas o casi estáticas. La capacidad de mantenimiento siempre es una buena explicación, pero hay más contextos que considerar. – Nick

3

Si su variable se define como NVARCHAR(MAX), entonces puede tener un tamaño de 2 GB (recuerde que NVARCHAR usa dos bytes para cada carácter, aparte de la compresión). Sin embargo, si te estás acercando a este tamaño, la longitud de tu declaración de SQL es probablemente la menor de tus preocupaciones.

+0

No no no, sabía que NVARCHAR (MAX) es de 2 GB. Quise decir el compilador sql, ¿no tiene ningún problema con ejecutar una instrucción de 2GB? –

+0

¿Lo has intentado? De nuevo, si su declaración SQL se acerca a este tamaño, hay problemas más grandes en mi humilde opinión. –

+0

-> sí, tienes razón. –

4

textualmente de the documentation:

65.536 * Red de tamaño de paquete

Lo que no está claro, pero que cualquier persona sana pondría en duda de inmediato, es lo que quiere decir "Tamaño de paquete de red"?

tamaño de paquete de red, en este caso, como se esperaba, no refiere al tamaño físico, ya que esto rompería la abstracción de protocolo garantizado streaming de entrega de extremo a extremo (TCP), sino más bien se refiere a tamaño de paquete en el contexto del protocolo de flujo de datos tabulares utilizado por SQL Server para la comunicación. De acuerdo con la misma documentación, el tamaño predeterminado de un paquete TDS es 4KB.

+0

65,536 * 4096 = 268,435,456 bytes (si alguien quería el número real) –

Cuestiones relacionadas