Eu troquei o PRINT por RAISERROR nas minhas queries

Desde que comecei com o SQL Server, eu usava PRINT nas minhas queries para acompanhar o progresso da execução no SSMS. Eu incluía um PRINT em pontos importantes, com avisos para me ajudar a identificar o andamento e resultados parciais.


Tudo mudou quando eu descobri o blog do Brent Ozar!


Ok, parece propaganda, mas é verdade...


Quando comecei a estudar o o First Responder Kit, percebi que o Brent Ozar usava RAISERROR ao invés de PRINT. E na verdade isso faz muito sentido, já que o uso de PRINT traz algumas desvantagens:

  • O PRINT não produz necessariamente nada no momento em que é chamado.

  • As instruções PRINT não são exibidas no Profiler.

  • O PRINT não pode receber informações variáveis ​​sem CAST ou CONVERT.


Na minha opinião, o maior problema do PRINT é não exibir seu resultado no momento que o comando é executado. Só isso acaba com o uso do PRINT para exibir mensagens de status.


Vamos ver esse exemplo:


Se rodar esse código no SSMS, você verá as duas mensagens... só depois dos 10 segundos! Assim não ajuda muito a debugar um código, né?


Ok. Se o SQL vai "prender" meu PRINT, vamos usar GO para libertá-lo, certo?


É... mais ou menos, né? Se eu incluir GO, o que vai acontecer com as variáveis que eu utilizo no meu script? Isso, elas serão descartadas. Então voltamos a estaca zero.


Analisando os scripts do Kit, eu aprendi a usar RAISERROR para controlar minhas queries.


Tente este código no SSMS:



Bem melhor, não é? A primeira mensagem aparece assim que iniciamos a execução do script, e a segunda depois de 5 segundos.


O RAISERROR tem vários argumentos, mas só precisamos de 3 para usar como substituto do PRINT em nossos códigos:

  1. Message: a mensagem retornada pelo RAISERROR.

  2. Severity: número entre 0 e 25, que faz o SQL tratar o erro de diferentes maneiras. Eu deixo 0 para não receber mensagens de erro.

  3. State: número entre 0 e 255 que nos ajuda a diferenciar um erro do outro. Eu deixo 1.


E, para encerrar, uma dúvida: alguém sabe onde foi parar o E que falta em RAISERROR???



Posts Em Destaque
Posts Recentes
Arquivo
Procurar por tags