Verwenden von IF- und WHILE-Blöcken, um den Programmablauf zu steuern

Abgeschlossen

Alle Programmiersprachen enthalten Elemente, mit denen Sie den Fluss des Programms oder die Reihenfolge bestimmen können, in der Anweisungen ausgeführt werden. Obwohl nicht so vollständig wie Sprachen wie C# bereitgestellt werden, stellt T-SQL eine Reihe von Steuerelement-of-Flow-Schlüsselwörtern bereit, mit denen Sie Logiktests durchführen und Schleifen erstellen können, die Ihre T-SQL-Datenmanipulationsanweisungen enthalten. In dieser Lektion erfahren Sie, wie Sie die Schlüsselwörter T-SQL IF und WHILE verwenden.

Grundlegendes zur T-SQL-Steuerung der Flusssprache

SQL Server stellt Sprachelemente bereit, die den Ablauf der Programmausführung innerhalb von T-SQL-Batches, gespeicherten Prozeduren und benutzerdefinierten Multistatement-Funktionen steuern. Diese Ablaufsteuerungselemente bedeuten, dass Sie programmgesteuert bestimmen können, ob Anweisungen ausgeführt und die Reihenfolge dieser Anweisungen programmgesteuert bestimmt werden soll.

Diese Elemente umfassen, sind jedoch nicht auf Folgendes beschränkt:

  • WENN... ELSE, das Code basierend auf einem booleschen Ausdruck ausführt.
  • WHILE, wodurch eine Schleife erstellt wird, die ausgeführt wird, wenn eine Bedingung erfüllt ist.
  • ANFANGEN... END, das eine Reihe von T-SQL-Anweisungen definiert, die zusammen ausgeführt werden sollen.
  • Andere Schlüsselwörter, z. B. BREAK, CONTINUE, WAITFOR und RETURN, die zur Unterstützung von T-SQL-Ablaufsteuerungsvorgängen verwendet werden.

Hier ist ein Beispiel für die IF-Anweisung:

IF OBJECT_ID('dbo.tl') IS NOT NULL
    DROP TABLE dbo.tl
GO

Verwenden Sie bedingte Logik in Ihren Programmen mit WENN... ODER

Das WENN... ELSE-Struktur wird in T-SQL verwendet, um einen Codeblock basierend auf einem Prädikat bedingt auszuführen. Die IF-Anweisung bestimmt, ob die folgende Anweisung oder der folgende Block (wenn BEGIN... END wird verwendet) wird ausgeführt. Wenn das Prädikat als WAHR ausgewertet wird, wird der Code im Block ausgeführt. Wenn das Prädikat als FALSCH oder UNBEKANNT ausgewertet wird, wird der Block nicht ausgeführt, es sei denn, das optionale ELSE-Schlüsselwort wird verwendet, um einen anderen Codeblock zu identifizieren.

In der folgenden WENN-Anweisung werden wir die Datenbank fragen, ob die OBJECT_ID IS NULL ist und wenn ja, die PRINT-Anweisung zurückgeben. In diesem Beispiel ist das Objekt NICHT NULL und daher FALSE, was bedeutet, dass der BEGIN/END-Code nicht ausgeführt wird. Die PRINT-Anweisung wird nur ausgeführt, wenn das Objekt nicht in der Datenbank vorhanden ist.

USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
    PRINT 'The specified object does not exist';
END;

Aufgrund der Einschränkungen mit dem obigen Code mit nur einer IF-Anweisung kann dies verwirrend sein. Die Kombination von WENN und ELSE bietet Ihnen mehr Flexibilität mit der Logik in Ihrem Code, und Sie können mehrere ELSE-Anweisungen verwenden. Bei Verwendung von ELSE haben Sie eine weitere Ausführungsoption, wenn das IF-Prädikat als FALSCH oder UNBEKANNT ausgewertet wird, wie im folgenden Beispiel gezeigt:

IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
    PRINT 'The specified object does not exist';
END
ELSE
BEGIN
    PRINT 'The specified object exists';
END;

Innerhalb von Datenmanipulationsvorgängen kann die Verwendung von WENN mit dem EXISTS-Schlüsselwort ein nützliches Tool für effiziente Existenzprüfungen sein, wie im folgenden Beispiel gezeigt:

IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
    PRINT 'Employee has associated orders';
END;

Grundlegendes zur Schleifenschleife mithilfe von WHILE-Anweisungen

Die WHILE-Anweisung wird verwendet, um Code in einer Schleife basierend auf einem Prädikat auszuführen. Wie die IF-Anweisung bestimmt die WHILE-Anweisung, ob die folgende Anweisung oder der folgende Block (wenn BEGIN... END wird verwendet) wird ausgeführt. Die Schleife wird weiterhin ausgeführt, solange die Bedingung als WAHR ausgewertet wird. In der Regel steuern Sie die Schleife mit einer Variablen, die vom Prädikat getestet und im Textkörper der Schleife selbst bearbeitet wird.

Im folgenden Beispiel wird die @empid Variable im Prädikat verwendet und deren Wert im BEGIN-Objekt geändert... END-Block:

DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
   BEGIN
	SELECT @lname = lastname FROM HR.Employees
		WHERE empid = @empid;
	PRINT @lname;
	SET @empid += 1;
   END;

Für zusätzliche Optionen in einer WHILE-Schleife können Sie die Schlüsselwörter CONTINUE und BREAK verwenden, um den Fluss zu steuern.