Ambiente di esecuzione del batch e MARS

Da MicrosoftSQL Server 2005, è possibile abilitare le connessioni per supportare più set di risultati attivi (MARS, Multiple Active Result Sets). A queste connessioni è associato un ambiente di esecuzione del batch predefinito.

L'ambiente di esecuzione del batch include i componenti seguenti:

  • Valori dell'opzione SET, inclusi ANSI_NULLS, DATE_FORMAT, LANGUAGE e TEXTSIZE.

  • Contesto di protezione, ovvero il ruolo utente o applicazione per l'ambiente di esecuzione del batch.

  • Contesto del database, ovvero il database corrente per l'ambiente.

  • Funzioni dello stato di esecuzione, incluse @@ERROR, @@ROWCOUNT, @@FETCH_STATUS e @@IDENTITY.

  • Tabelle temporanee di livello principale.

Ogni nuovo batch di cui viene avviata l'esecuzione per una connessione specifica riceve una copia dell'ambiente predefinito. Quando un batch viene eseguito, tutte le modifiche apportate all'ambiente di esecuzione vengono definite a livello di ambito del batch specifico. Al termine dell'esecuzione, le impostazioni di esecuzione vengono copiate nell'ambiente predefinito. Nel caso di un singolo batch che prevede più comandi da eseguire in modo sequenziale, il comportamento osservato corrisponde a quello delle connessioni che includono client e server di versioni precedenti di SQL Server.

Nelle versioni precedenti di SQL Server è possibile eseguire solo un batch per volta. Le modifiche apportate dal batch all'ambiente del batch sono pertanto visibili in tutti i batch successivi.

Per le stored procedure e le funzioni, l'ambiente predefinito per un batch corrisponde all'ambiente predefinito per la connessione, ma, al termine dell'esecuzione, le modifiche non vengono copiate di nuovo nell'ambiente di esecuzione del batch predefinito per la connessione.

Si supponga, ad esempio, che due batch vengano eseguiti come illustrato di seguito:

--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

Si supponga inoltre che MARS sia attivato per la connessione con l'ambiente di esecuzione predefinito, con l'opzione SET ARITHABORT impostata su OFF e con l'opzione SET ANSI_WARNINGS impostata su ON.

Se entrambi i batch vengono eseguiti simultaneamente nella connessione, l'esecuzione inizia con le impostazioni dell'ambiente del batch predefinito per la connessione. Durante l'esecuzione, gli ambienti vengono definiti a livello di ambito per garantire che le modifiche dell'ambiente in un batch non abbiano influenza sulle modifiche nell'altro batch. Al completamento dell'esecuzione di un batch, l'ambiente risultante viene copiato nelle impostazioni predefinite per la connessione. L'ambiente predefinito risultante per la connessione dipende dall'ultimo batch completato. Questo ambiente sarà quello utilizzato dal batch successivo eseguito.