Batches

Bei einem Batch handelt es sich um eine Gruppe von einer oder mehreren Transact-SQL-Anweisungen, die gleichzeitig von einer Anwendung zur Ausführung an SQL Server gesendet werden. SQL Server kompiliert die Anweisungen eines Batches in eine einzelne ausführbare Einheit, die als Ausführungsplan bezeichnet wird. Die Anweisungen im Ausführungsplan werden dann nacheinander ausgeführt.

Jede Transact-SQL-Anweisung sollte mit einem Semikolon beendet werden. Diese Anforderung wird nicht erzwungen, jedoch ist die Möglichkeit, eine Anweisung ohne Semikolon abzuschließen, veraltet und wird möglicherweise in künftigen Versionen von Microsoft SQL Server entfernt.

Ein Kompilierfehler, wie z. B. ein Syntaxfehler, verhindert die Kompilierung des Ausführungsplans. In diesem Fall werden keine Anweisungen im Batch ausgeführt.

Ein Laufzeitfehler, wie z. B. ein arithmetischer Überlauf oder eine Einschränkungsverletzung, hat eine der folgenden Auswirkungen:

  • Die meisten Laufzeitfehler beenden die aktuelle Anweisung und die im Batch darauf folgenden Anweisungen.

  • Einige Laufzeitfehler, wie z. B. Einschränkungsverletzungen, beenden nur die aktuelle Anweisung. Alle verbleibenden Anweisungen im Batch werden ausgeführt.

Der Fehler wirkt sich nicht auf die Anweisungen aus, die vor der Anweisung ausgeführt wurden, bei der der Laufzeitfehler auftrat. Die einzige Ausnahme tritt auf, wenn der Batch sich in einer Transaktion befindet und der Fehler einen Rollback für die Transaktion verursacht. In diesem Fall wird für alle vor dem Laufzeitfehler vorgenommenen Datenänderungen, für die noch kein Commit ausgeführt wurde, ein Rollback ausgeführt.

Angenommen, ein Batch enthält zehn Anweisungen. Wenn die fünfte Anweisung einen Syntaxfehler aufweist, wird keine der Anweisungen im Batch ausgeführt. Falls der Batch kompiliert ist und die zweite Anweisung während der Ausführung einen Fehler erzeugt, hat dies keine Auswirkungen auf die Ergebnisse der ersten Anweisung, da diese bereits ausgeführt wurde.

SQL Server ermöglicht die Neukompilierung auf Anweisungsebene. Dies bedeutet, dass nur die Anweisung und nicht der ganze Batch neu kompiliert wird, falls eine Anweisung eine Neukompilierung auslöst. Dieses Verhalten unterscheidet sich von SQL Server 2000. Betrachten Sie das folgende Beispiel, das eine CREATE TABLE-Anweisung und vier INSERT-Anweisungen im selben Batch enthält.

CREATE TABLE dbo.t3(a int) ;
INSERT INTO dbo.t3 VALUES (1) ;
INSERT INTO dbo.t3 VALUES (1,1) ;
INSERT INTO dbo.t3 VALUES (3) ;
GO

SELECT * FROM dbo.t3 ;

Zuerst wird der Batch kompiliert. Die CREATE TABLE-Anweisung wird kompiliert, aber da die dbo.t3-Tabelle noch nicht vorhanden ist, werden die INSERT-Anweisungen nicht kompiliert.

Anschließend wird der Batch ausgeführt. Die Tabelle wird erstellt. Die erste INSERT-Anweisung wird kompiliert und dann sofort ausgeführt. Die Tabelle weist nun eine Zeile auf. Dann wird die zweite INSERT-Anweisung kompiliert. Bei der Kompilierung tritt ein Fehler auf, und der Batch wird beendet. Die SELECT-Anweisung gibt eine Zeile zurück.

In SQL Server 2000 wird mit der Ausführung des Batches begonnen und die Tabelle erstellt. Die drei INSERT-Anweisungen werden nacheinander kompiliert, aber nicht ausgeführt. Da die zweite INSERT-Anweisung einen Kompilierfehler erzeugt, wird der gesamte Batch abgebrochen. Die SELECT-Anweisung gibt keine Zeile zurück.

Regeln für die Verwendung von Batches

Für die Verwendung von Batches gelten die folgenden Regeln:

  • CREATE DEFAULT-, CREATE FUNCTION-, CREATE PROCEDURE-, CREATE RULE-, CREATE SCHEMA-, CREATE TRIGGER- und CREATE VIEW-Anweisungen können nicht mit anderen Anweisungen in einem Batch kombiniert werden. Der Batch muss mit der CREATE-Anweisung beginnen. Alle anderen folgenden Anweisungen in diesem Batch werden als Teil der Definition der ersten CREATE-Anweisung interpretiert.

  • Es ist nicht möglich, im selben Batch eine Tabelle zu ändern und dann auf die neuen Spalten zu verweisen.

  • Falls eine EXECUTE-Anweisung die erste Anweisung in einem Batch ist, wird das EXECUTE-Schlüsselwort nicht benötigt. Das EXECUTE-Schlüsselwort ist erforderlich, wenn die EXECUTE-Anweisung nicht die erste Anweisung im Batch ist.

Wichtiger HinweisWichtig

Batchdateien können Anmeldeinformationen enthalten, die als unverschlüsselter Text gespeichert sind. Die Anmeldeinformationen werden während der Batchausführung möglicherweise auf dem Bildschirm des Benutzers angezeigt.