Instruções de utilitários do SQL Server – GO

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPonto de extremidade de análises SQL no Microsoft FabricWarehouse no Microsoft Fabric

O SQL Server fornece comandos que não são instruções Transact-SQL, mas que são reconhecidos pelos utilitários sqlcmd e osql e pelo Editor de Código do SQL Server Management Studio. Estes comandos podem ser usados para facilitar a legibilidade e a execução de lotes e scripts.

O GO sinaliza o término de um lote de instruções Transact-SQL para os utilitários do SQL Server.

Convenções de sintaxe de Transact-SQL

Sintaxe

GO [count]  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

contagem
É um número inteiro positivo. O lote que precede GO será executado pelo número de vezes especificado.

Comentários

O GO não é uma instrução Transact-SQL, ele é um comando reconhecido pelos utilitários sqlcmd e osql e pelo Editor de Códigos do SQL Server Management Studio.

Os utilitários do SQL Server interpretam o GO como um sinal de que eles devem enviar o lote atual de instruções Transact-SQL para uma instância do SQL Server. O lote atual de instruções é composto de todas as instruções digitadas desde o último GO, ou desde o início da sessão ad hoc ou script, se esse for o primeiro GO.

Uma instrução Transact-SQL não pode ocupar a mesma linha que um comando GO. No entanto, a linha pode conter comentários.

Os usuários precisam seguir as regras de lotes. Por exemplo, qualquer execução de um procedimento armazenado depois da primeira instrução em um lote deve incluir a palavra-chave EXECUTE. O escopo de variáveis locais (definidas pelo usuário) é limitado a um lote e não pode ser referenciado após um 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  

Os aplicativos do SQL Server podem enviar várias instruções Transact-SQL a uma instância do SQL Server para execução como um lote. As instruções em lote são compiladas em um único plano de execução. Os programadores que executam instruções ad hoc em utilitários do SQL Server ou que compilam scripts de instruções Transact-SQL a serem executados por meio dos utilitários do SQL Server, usam o GO para sinalizar o término de um lote.

Os aplicativos baseados em APIs ODBC ou OLE DB recebem um erro de sintaxe quando tentam executar um comando GO. Os utilitários do SQL Server nunca enviam um comando GO ao servidor.

Não use um ponto e vírgula como terminador de instrução depois de GO.

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

No editor de consultas SQL do portal do Microsoft Fabric, cada instrução SQL é executada como uma sessão independente. O contexto de sessão não persiste entre instruções SQL. Para saber mais, confira Editor de consultas SQL.

Permissões

GO é um comando de utilitário que não exige nenhuma permissão. Pode ser executado por qualquer usuário.

Exemplos

O exemplo a seguir cria dois lotes. O primeiro lote contém apenas uma instrução USE AdventureWorks2022 para definir o contexto do banco de dados. As instruções restantes usam uma variável local. Portanto, todas as declarações de variável local devem ser agrupadas em um único lote. Isso é feito sem que haja um comando GO até depois da última instrução que faz referência à variável.

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  

O exemplo a seguir executa as instruções no lote duas vezes.

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