Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie organisiert man eine Endlosschleife in SQL Server?

Zusätzlich zu WHILE 1 = 1 Wie die anderen Antworten andeuten, füge ich meinen SQL-Infintie-Schleifen häufig ein "Timeout" hinzu, wie im folgenden Beispiel:

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

Ich fand die obige Technik innerhalb einer gespeicherten Prozedur nützlich, die von einer langen Abfrage aufgerufen wird AJAX Backend. Da die Schleife auf der Datenbankseite liegt, muss die Anwendung nicht ständig auf die Datenbank zugreifen, um nach neuen Daten zu suchen.