Además del WHILE 1 = 1
como sugieren las otras respuestas, a menudo agrego un "tiempo de espera" a mis bucles SQL "infintie", como en el siguiente ejemplo:
DECLARE @startTime datetime2(0) = GETDATE();
-- This will loop until BREAK is called, or until a timeout of 45 seconds.
WHILE (GETDATE() < DATEADD(SECOND, 45, @startTime))
BEGIN
-- Logic goes here: The loop can be broken with the BREAK command.
-- Throttle the loop for 2 seconds.
WAITFOR DELAY '00:00:02';
END
Encontré la técnica anterior útil dentro de un procedimiento almacenado que se llama desde un sondeo largo AJAX back-end Tener el bucle en el lado de la base de datos libera a la aplicación de tener que acceder constantemente a la base de datos para buscar datos nuevos.