Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Endpoint de análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de dados SQL no Microsoft Fabric
O SQL Server fornece comandos que não são instruções Transact-SQL, mas são reconhecidos pelos utilitários sqlcmd e osql e pelo Editor de Códigos do SQL Server Management Studio. Esses comandos podem ser usados para facilitar a legibilidade e a execução de lotes e scripts.
GO sinaliza o fim de um lote de instruções Transact-SQL para os utilitários do SQL Server.
Transact-SQL convenções de sintaxe
Syntax
GO [count]
Arguments
count
É um número inteiro positivo. O lote anterior ao GO executará o número especificado de vezes.
Remarks
GO não é uma declaração Transact-SQL; é um comando reconhecido pelos utilitários sqlcmd e osql e pelo editor de código do SQL Server Management Studio.
Os utilitários do SQL Server interpretam GO como um sinal de que devem enviar o lote atual de instruções Transact-SQL para uma instância do SQL Server. O lote atual de instruções é composto por todas as instruções inseridas desde a última GO, ou desde o início da sessão ad hoc ou script, se esta for a primeira 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 devem seguir as regras para lotes. Por exemplo, qualquer execução de um procedimento armazenado após a primeira instrução em um lote deve incluir a palavra-chave EXECUTE. O escopo das 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 para uma instância do SQL Server para execução em lote. As instruções no lote são então compiladas em um único plano de execução. Programadores que executam instruções ad hoc nos utilitários do SQL Server ou criam scripts de instruções Transact-SQL para executar através dos utilitários do SQL Server, usam GO para sinalizar o fim de um lote.
Os aplicativos baseados nas APIs ODBC ou OLE DB recebem um erro de sintaxe se tentarem executar um comando GO. Os utilitários do SQL Server nunca enviam um comando GO para o servidor.
Não use ponto-e-vírgula como terminador de instrução após 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 da sessão não persiste nas instruções SQL. Para obter mais informações, consulte Editor de consultas SQL.
Permissions
GO é um comando utilitário que não requer permissões. Pode ser executado por qualquer utilizador.
Examples
O exemplo a seguir cria dois lotes. O primeiro lote contém apenas uma USE AdventureWorks2022 instrução para definir o contexto do banco de dados. As instruções restantes usam uma variável local. Portanto, todas as declarações de variáveis locais devem ser agrupadas em um único lote. Isso é feito não tendo um GO comando 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