RAISERROR WITH NOWAIT
Par Arian Papillon le mercredi 7 août 2019, 19:06 - Lien permanent
Les scripts SQL et les procédures stockées n'affichent pas le résultat des commandes PRINT ou RAISERROR de manière à nous informer sur l'avancement de notre script.
Question souvent posée : comment faire pour afficher mes informations au fil de l'eau lors de l'exécution ? La solution : utiliser RAISERROR WITH NOWAIT !
Par exemple, si nous exécutons le script suivant, les messages ne vont pas à chaque tour de boucle comme on aurait pu le souhaiter, mais en bloc. Curieusement, selon la commande utilisée (PRINT ou RAISERROR), les messages vont s'afficher en un ou plusieurs blocs, voire attendre pour s'afficher la fin de l'exécution. C'est en tout cas inutilisable pour suivre l'avancement de notre boucle...
DECLARE @a INT = 1, @chra VARCHAR(2)
WHILE @a <= 60
BEGIN
SET @chra = CAST(@a AS varchar(2))
PRINT @chra
RAISERROR (@chra,0,1)
WAITFOR DELAY '00:00:01'
SET @a=@a+1
END
La solution est simple : utiliser RAISERROR avec l'option NOWAIT en lieu et place du PRINT.
DECLARE @a INT = 1, @chra VARCHAR(2)
WHILE @a <= 60
BEGIN
SET @chra = CAST(@a AS varchar(2))
-- PRINT @chra
RAISERROR (@chra,0,1) WITH NOWAIT
WAITFOR DELAY '00:00:01'
SET @a=@a+1
END
Chose amusante, si on laisse les deux instructions actives (PRINT et RAISERROR WITH NOWAIT), le PRINT s'affiche aussi à chaque tour de boucle, déclenché par l'affichage du RAISERROR...