1avergne

Prévoir une sortie dans une boucle

2021-08-23

Il y a plein de raisons de faire une boucle en SQL : suppression par lots, traitement par partition… Mais il arrive que ça prenne un peu de temps et qu’il faille interrompre l’exécution de la boucle. Dans ce cas on n’a pas forcement envie d’annuler tout ce qui a déjà été fait.

image

Pour me permettre d’interrompre proprement une boucle et de sortir entre deux itérations sans faire de break sur ma commande, j’ajoute l’instruction suivante dans la condition de ma boucle (while ou curseur) : AND OBJECT_ID('tempdb..##stop') is null

Par exemple :

DECLARE @m int = 10

WHILE @m >= 0 AND OBJECT_ID('tempdb..##stop') is null
BEGIN
	PRINT '--- ' + convert(NVARCHAR(5), @m) + ' ---'
		
	SELECT @m -= 1
END

Pour sortir de la boucle, il suffit alors de créer la table ##stop dans une autre fenêtre :

select 1 as i into ##stop

Si je dois relancer la boucle, je supprime la table ou je ferme la fenêtre où elle a été créée :

drop table ##stop