GO (Transact-SQL)
Sinaliza o término de um lote de instruções Transact-SQL para os utilitários SQL Server.
Sintaxe
GO [count]
Argumentos
- count
É um número inteiro positivo. O lote que precede GO será executado pelo número de vezes especificado.
Comentários
GO não é uma instrução Transact-SQL; é um comando reconhecido pelos utilitários sqlcmd e osql e pelo Editor de Códigos do SQL Server Management Studio.
Os utilitários SQL Server interpretam 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 AdventureWorks2008R2;
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 SQL Server podem enviar várias instruções Transact-SQL a uma instância de SQL Server para execução como 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 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.
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 USEAdventureWorks2008R2 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 AdventureWorks2008R2;
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