Batch-Ausführungsumgebung und MARS

Beginnend mit Microsoft SQL Server 2005 kann für Verbindungen die Unterstützung von MARS (Multiple Active Result Sets) aktiviert werden. Diesen Verbindungen wird eine standardmäßige Batch-Ausführungsumgebung zugeordnet.

Die Batch-Ausführungsumgebung wird aus den folgenden Komponenten gebildet:

  • SET-Optionswerte (einschließlich ANSI_NULLS, DATE_FORMAT, LANGUAGE und TEXTSIZE)

  • Sicherheitskontext (die Benutzer- oder Anwendungsrolle für die Batch-Ausführungsumgebung)

  • Datenbankkontext (die aktuelle Datenbank für die Umgebung)

  • Ausführungsstatusfunktionen (einschließlich @@ERROR, @@ROWCOUNT, @@FETCH_STATUS und @@IDENTITY)

  • Temporäre Tabellen der obersten Ebene

Jeder neue Batch, dessen Ausführung für eine bestimmte Verbindung gestartet wird, erhält eine Kopie der Standardumgebung. Bei jeder Batch-Ausführung werden sämtliche an der Ausführungsumgebung vorgenommenen Änderungen auf diesen speziellen Batch begrenzt. Beim Abschluss der Ausführung werden die Ausführungseinstellungen in die Standardumgebung kopiert. Wenn ein einzelner Batch mehrere Befehle ausgibt, die nacheinander ausgeführt werden sollen, entspricht das beobachtete Verhalten dem von Verbindungen unter Beteiligung von Clients oder Servern aus früheren Versionen von SQL Server.

In früheren Versionen von SQL Server konnte immer nur ein Batch zu einer bestimmten Zeit ausgeführt werden. Daher waren Änderungen an der Batch-Umgebung, die von einem Batch vorgenommen wurden, für alle nachfolgenden Batches sichtbar.

Für gespeicherte Prozeduren und Funktionen entspricht die Standardumgebung für einen Batch dem Standard für die Verbindung. Wenn jedoch die Ausführung abgeschlossen ist, werden die Änderungen nicht zurück in die Standard-Batch-Ausführungsumgebung der Verbindung kopiert.

Angenommen, zwei Batches werden z. B. folgendermaßen ausgeführt:

--First Batch
SET ARITHABORT ON
SET ANSI_WARNINGS ON
SELECT 1/0
GO
--Second Batch
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
SELECT 1/0
GO

Außerdem wird angenommen, dass MARS für die Verbindung mit der Standardausführungsumgebung aktiviert und SET ARITHABORT auf OFF und SET ANSI_WARNING auf ON gesetzt ist.

Wenn beide Batches gleichzeitig über die Verbindung übermittelt werden, startet ihre Ausführung mit den Einstellungen der Standard-Batch-Umgebung der Verbindung. Während der Ausführung werden ihre Umgebungen begrenzt, um sicherzustellen, dass Umgebungsänderungen in einem Batch sich nicht auf die Änderungen im anderen Batch auswirken. Ist die Ausführung eines Batches abgeschlossen, wird die resultierende Umgebung in die Standardumgebung der Verbindung kopiert. Die resultierende Standardumgebung der Verbindung richtet sich nach dem Batch, dessen Ausführung zuletzt abgeschlossen wurde. Dies ist die Umgebung, die vom nächsten Batch verwendet wird, der ausgeführt wird.