Istruzioni delle utilità SQL Server - GO

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Endpoint di analisi SQL di Azure Synapse Analyticsin Microsoft FabricWarehouse in Microsoft Fabric

In SQL Server vengono forniti comandi che non rappresentano istruzioni Transact-SQL, ma che vengono riconosciuti dalle utilità sqlcmd e osql e dall'editor del codice di SQL Server Management Studio. Questi comandi possono essere utilizzati per facilitare la leggibilità e l'esecuzione di batch e script.

GO contrassegna la fine di un batch di istruzioni di Transact-SQL per le utilità di SQL Server.

Convenzioni di sintassi Transact-SQL

Sintassi

GO [count]  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

count
Numero integer positivo. Il batch che precede GO verrà eseguito il numero specificato di volte.

Osservazioni:

GO non è un'istruzione Transact-SQL, ma un comando riconosciuto dalle utilità sqlcmd e osql e dall'editor del codice di SQL Server Management Studio.

Il comando GO viene interpretato dalle utilità di SQL Server come un segnale per l'invio del batch corrente di istruzioni Transact-SQL a un'istanza di SQL Server. Il batch di istruzioni corrente è composto da tutte le istruzioni immesse dopo l'ultima esecuzione del comando GO oppure dopo l'avvio della sessione ad hoc o dello script se si tratta della prima esecuzione di GO.

Non è possibile specificare un'istruzione Transact-SQL nella stessa riga di un comando GO. La riga, tuttavia, può includere commenti.

Gli utenti devono seguire le regole per i batch. Per l'esecuzione di una stored procedure dopo la prima istruzione di un batch, ad esempio, è necessario includere la parola chiave EXECUTE. L'ambito delle variabili locali definite dall'utente è limitato a un batch e non è possibile fare riferimento a tali variabili dopo l'esecuzione del comando GO.

USE AdventureWorks2022;  
GO  
DECLARE @MyMsg VARCHAR(50)  
SELECT @MyMsg = 'Hello, World.'  
GO -- @MyMsg is not valid after this GO ends the batch.  
  
-- Yields an error because @MyMsg not declared in this batch.  
PRINT @MyMsg  
GO  
  
SELECT @@VERSION;  
-- Yields an error: Must be EXEC sp_who if not first statement in   
-- batch.  
sp_who  
GO  

Le applicazioni di SQL Server possono inviare più istruzioni Transact-SQL a un'istanza di SQL Server affinché vengano eseguite come batch. Le istruzioni del batch vengono quindi compilate in un unico piano di esecuzione. I programmatori che eseguono istruzioni ad hoc nelle utilità di SQL Server oppure compilano script di istruzioni Transact-SQL da eseguire tramite le utilità di SQL Server usano il comando GO per segnalare la fine di un batch.

Nelle applicazioni basate sulle API ODBC o OLE DB i tentativi di esecuzione del comando GO provocano un errore di sintassi. Le utilità di SQL Server non inviano mai un comando GO al server.

Non usare un punto e virgola come carattere di terminazione dopo GO.

-- Yields an error because ; is not permitted after GO  
SELECT @@VERSION;  
GO;  

Nell'editor di query SQL del portale di Microsoft Fabric ogni istruzione SQL viene eseguita come sessione indipendente. Il contesto della sessione non persiste tra le istruzioni SQL. Per altre informazioni, vedere Editor di query SQL.

Autorizzazioni

GO è un comando di utilità che non richiede autorizzazioni e può essere eseguito da qualsiasi utente.

Esempi

Nell'esempio seguente vengono creati due batch. Il primo contiene solo un'istruzione USE AdventureWorks2022 per l'impostazione del contesto del database. Nelle restanti istruzioni viene utilizzata una variabile locale. Pertanto, tutte le dichiarazioni della variabile locale devono essere raggruppate in un singolo batch. A tale scopo, è necessario inserire il comando GO solo dopo l'ultima istruzione che fa riferimento alla variabile.

USE AdventureWorks2022;  
GO  
DECLARE @NmbrPeople INT  
SELECT @NmbrPeople = COUNT(*)  
FROM Person.Person;  
PRINT 'The number of people as of ' +  
      CAST(GETDATE() AS CHAR(20)) + ' is ' +  
      CAST(@NmbrPeople AS CHAR(10));  
GO  

Nell'esempio seguente vengono eseguite due volte le istruzioni del batch.

SELECT DB_NAME();  
SELECT USER_NAME();  
GO 2