Condividi tramite


Batch

Un batch è un gruppo di una o più istruzioni Transact-SQL inviate contemporaneamente da un'applicazione a SQL Server per l'esecuzione. Le istruzioni di un batch vengono compilate in SQL Server in una singola unità eseguibile, denominata piano di esecuzione. All'interno di un piano di esecuzione le istruzioni vengono eseguite una per volta.

L'istruzione Transact-SQL deve terminare con un punto e virgola. Questo requisito non è applicato, ma la possibilità di terminare un'istruzione senza un punto e virgola non è approvata e potrebbe essere rimossa in una versione futura di Microsoft SQL Server.

Un errore di compilazione, ad esempio un errore di sintassi, impedisce la compilazione del piano di esecuzione. In questo caso, non viene eseguita alcuna istruzione del batch.

Un errore di run-time, ad esempio un overflow aritmetico o la violazione di un vincolo, può produrre uno degli effetti seguenti:

  • La maggior parte degli errori comporta l'interruzione dell'istruzione corrente e delle istruzioni successive del batch.

  • Un numero di errori inferiore, ad esempio la violazione di vincoli, comporta l'interruzione solo dell'istruzione corrente, mentre le altre istruzioni del batch vengono eseguite normalmente.

Le istruzioni eseguite prima di quella con cui si è verificato l'errore di run-time non vengono modificate in alcun modo, a meno che il batch non sia in esecuzione in una transazione di cui, in seguito all'errore, viene eseguito il rollback. In questo caso, tutte le modifiche dei dati di cui non è stato eseguito il commit prima dell'errore di run-time vengono annullate.

Si supponga, ad esempio, che un batch includa 10 istruzioni. Se la quinta istruzione presenta un errore di sintassi, non viene eseguita alcuna istruzione del batch. Se il batch viene compilato e la seconda istruzione non viene eseguita correttamente, i risultati della prima istruzione rimangono inalterati, in quanto l'istruzione è già stata eseguita.

In SQL Server è prevista la ricompilazione a livello di istruzioni. Ne consegue che, se una ricompilazione viene attivata da un'istruzione, verrà ricompilata solo quell'istruzione, non l'intero batch. Questo comportamento è diverso da quello di SQL Server 2000. Si consideri l'esempio seguente in cui uno stesso batch contiene un'istruzione CREATE TABLE e quattro istruzioni INSERT.

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 ;

Innanzitutto, il batch viene compilato. Viene compilata l'istruzione CREATE TABLE, ma poiché la tabella dbo.t3 non esiste ancora, le istruzioni INSERT non vengono compilate.

Successivamente, viene avviata l'esecuzione del batch. Viene creata la tabella. La prima istruzione INSERT viene compilata e quindi immediatamente eseguita. La tabella dispone ora di una riga. A questo punto, viene compilata la seconda istruzione INSERT. La compilazione ha esito negativo e il batch viene interrotto. L'istruzione SELECT restituisce una riga.

In SQL Server 2000 viene avviata l'esecuzione del batch e viene creata la tabella. Le tre istruzioni INSERT vengono compilate una per una, ma non eseguite. Poiché la seconda istruzione INSERT causa un errore di compilazione, l'intero batch viene interrotto. L'istruzione SELECT non restituisce righe.

Regole per l'utilizzo dei batch

Le regole seguenti vengono applicate all'utilizzo dei batch:

  • Le istruzioni CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, CREATE TRIGGER e CREATE VIEW non possono essere combinate ad altre istruzioni in un batch. L'istruzione CREATE deve essere la prima del batch. Tutte le istruzioni successive del batch vengono interpretate come parte della definizione della prima istruzione CREATE.

  • Non è possibile modificare una tabella e fare quindi riferimento alle nuove colonne nello stesso batch.

  • Se la prima istruzione di un batch è EXECUTE, non è necessario specificare la parola chiave EXECUTE. Questa parola chiave è invece obbligatoria se l'istruzione EXECUTE non è la prima istruzione del batch.

Nota importanteImportante

I file batch possono includere credenziali archiviate in formato testo normale. È possibile che le credenziali vengano visualizzate sullo schermo dell'utente durante l'esecuzione del batch.