Beschreiben von Batches
T-SQL-Batches sind Sammlungen einer oder mehrerer T-SQL-Anweisungen, die von einem Client als einzelne Einheit an SQL Server übermittelt werden. SQL Server verarbeitet alle Anweisungen in einem Batch gleichzeitig, indem der Code analysiert, optimiert und ausgeführt wird.
Wenn Sie ein Berichtsautor sind, der in der Regel Abfragen mithilfe von SELECT Anweisungen schreibt und keine Prozeduren, ist es dennoch wichtig, Batchgrenzen zu verstehen. Diese Grenzen wirken sich auf Die Arbeit mit Variablen und Parametern in gespeicherten Prozeduren und anderen Routinen aus. Beispielsweise muss eine Variable im selben Batch deklariert werden, in dem auf sie verwiesen wird. Daher ist es wichtig, zu erkennen, was in einem Batch enthalten ist.
Batches werden durch die Clientanwendung abgegrenzt. Wie Sie das Ende eines Batches markieren, hängt von den Einstellungen Ihres Clients ab. Für Microsoft-Clients, einschließlich SQL Server Management Studio (SSMS) und SQLCMD, lautet GOdas Schlüsselwort .
In diesem Beispiel gibt es zwei unterschiedliche Batches, die jeweils mit einer GO Anweisung beendet werden:
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
Der Batchterminator GO ist kein T-SQL-Schlüsselwort, wird jedoch von SSMS erkannt, um das Ende eines Batches anzugeben.
Beachten Sie bei der Arbeit mit T-SQL-Batches zwei wichtige Überlegungen:
- Batches sind Grenzen für den variablen Bereich, was bedeutet, dass eine variable, die in einem Batch definiert ist, nur von einem anderen Code im selben Batch referenziert werden kann.
- Einige Anweisungen, in der Regel Datendefinitionsanweisungen wie
CREATE VIEW,CREATE FUNCTIONundCREATE PROCEDUREkönnen nicht mit anderen in demselben Batch kombiniert werden.
Arbeiten mit Batches
Ein Batch ist eine Sammlung von T-SQL-Anweisungen, die für die Analyse und Ausführung an SQL Server übermittelt werden. Das Verständnis, wie Batches analysiert werden, ist hilfreich beim Identifizieren von Fehlermeldungen und Verhalten. Wenn ein Batch von einem Client übermittelt wird, z. B. wenn Sie die Schaltfläche "Ausführen" in SSMS drücken, wird der Batch vom SQL Server-Modul auf Syntaxfehler analysiert. Alle gefundenen Fehler führen dazu, dass der gesamte Batch abgelehnt wird; es gibt keine teilweise Ausführung von Anweisungen innerhalb des Batches.
Wenn der Batch die Syntaxüberprüfung übergibt, führt SQL Server weitere Schritte aus, löst Objektnamen auf, überprüft Berechtigungen und optimiert den Code für die Ausführung. Sobald dieser Prozess abgeschlossen ist und die Ausführung beginnt, sind Anweisungen einzeln erfolgreich oder schlagen fehl. Dies ist ein wichtiger Kontrast zur Syntaxüberprüfung. Wenn ein Laufzeitfehler in einer Zeile auftritt, kann die nächste Zeile weiterhin ausgeführt werden, es sei denn, Sie fügen dem Code fehlerbehandlung hinzu.
Der folgende Batch enthält z. B. einen Syntaxfehler:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Diese Fehlermeldung wird angezeigt:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
Der Fehler ist in Zeile 1 aufgetreten, der gesamte Batch wird jedoch abgelehnt, und die Ausführung wird nicht mit Zeile 2 fortgesetzt. Auch wenn jede INSERT-Anweisung umgekehrt und der Syntaxfehler in der zweiten Zeile auftreten würde, würde die erste Zeile nicht ausgeführt werden, da der gesamte Batch abgelehnt werden würde.
Im Gegensatz dazu enthält dieser korrigierte Batch keinen Fehler:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
In den vorherigen Beispielen werden INSERT -Anweisungen anstelle von SELECT -Anweisungen verwendet, da Änderungsbefehle häufiger in Batches gruppiert werden.