Às vezes, tenho um script SQL que possui uma ou mais seqüências super longas (às vezes até estúpidas). Normalmente, são VARBINARY
literais / constantes que representam arquivos / Assemblies, mas ocasionalmente são textos.
O principal problema com sequências muito longas é que alguns editores de texto não lidam com elas muito bem. Por exemplo, eu tenho um VARBINARY
literal que eu uso em uma CREATE ASSEMBLY [AssemblyName] FROM 0x....
declaração, e o próprio Assembly tem pouco mais de 1 MB de tamanho, o que equivale a pouco mais de 2 milhões de caracteres em um arquivo de texto, pois cada byte exige que dois caracteres sejam representados em notação hexadecimal (por exemplo 0x1F
= a 1
e an F
). O SQL Server Management Studio (SSMS) não lida com isso muito bem e trava por alguns segundos enquanto tento rolar a linha. E, de fato, algumas versões (sem saber se isso ainda acontece) exibirão um aviso sobre linhas longas ao abrir um script que tenha pelo menos uma linha em um determinado comprimento.
Uma questão secundária é que ela complica a formatação ao usar em um editor sem a opção de quebra de linha ativada ou postar online. O problema aqui é que o controle deslizante da barra de rolagem horizontal é muito estreito e movê-lo, mesmo que um pouco, geralmente rola o texto não muito longo para fora da vista.
Agora, o T-SQL não encerra comandos com novas linhas ou mesmo ponto e vírgula (embora os pontos e vírgulas sejam preferidos / recomendados, começando no SQL Server 2005). Portanto, como o SQL Server sabe analisar cada instrução de modo que saiba quando termina, parece que dividir a linha longa por várias linhas, separadas apenas por um newline/ carriage-return+ line-feed, não parece irracional. Mas isso não funciona nos dois casos.
PRINT 'Line1
Line2';
retorna (na guia "Mensagens"):
Line1
Line2
E isso faz sentido o suficiente, pois a nova linha está dentro de uma constante literal /. Mas fazer isso por um VARBINARY
também não funciona.
PRINT 0x1234
5678;
me dá um erro.