A veces tengo un script SQL que tiene una o más cadenas súper largas (a veces incluso estúpidas). Por lo general, estos son VARBINARY
literales / constantes que representan archivos / ensamblados, pero ocasionalmente son texto.
El principal problema con las cadenas realmente largas es que algunos editores de texto no las manejan tan bien. Por ejemplo, tengo un VARBINARY
literal que uso en una CREATE ASSEMBLY [AssemblyName] FROM 0x....
declaración, y el ensamblaje en sí tiene un tamaño de poco más de 1 MB, lo que equivale a poco más de 2 millones de caracteres en un archivo de texto, ya que cada byte requiere que dos caracteres se representen en notación hexadecimal (por ejemplo, 0x1F
a 1
y an F
). SQL Server Management Studio (SSMS) no maneja esto bien y se cuelga durante varios segundos mientras intento desplazarme por esa línea. Y, de hecho, algunas versiones (no estoy seguro de si esto todavía sucede) incluso mostrarán una advertencia sobre las líneas largas al abrir un script que tenga al menos una línea en una longitud determinada.
Un problema secundario es que complica el formato cuando se usa en un editor sin el ajuste de texto habilitado o cuando se publica en línea. El problema aquí es que el control deslizante de la barra de desplazamiento horizontal es muy angosto y moverlo aunque sea un poco por lo general desplaza el texto no muy largo fuera de la vista.
Ahora, T-SQL no termina los comandos con líneas nuevas o incluso con punto y coma (aunque se prefieren / recomiendan los punto y coma, comenzando con SQL Server 2005). Entonces, dado que SQL Server sabe cómo analizar cada declaración de manera que sepa cuándo termina, parece que dividir la línea larga en varias líneas, separadas solo por un newline/ carriage-return+ line-feed, no parece irrazonable. Pero esto no funciona en ninguno de los casos.
PRINT 'Line1
Line2';
devoluciones (en la pestaña "Mensajes"):
Line1
Line2
Y eso tiene bastante sentido ya que la nueva línea está dentro de un literal / constante. Pero hacer esto por un VARBINARY
también no funciona.
PRINT 0x1234
5678;
me da un error
fuente