Instruções de utilitários do SQL Server – GOSQL Server Utilities Statements - GO

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)nãoBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

O SQL ServerSQL Server fornece comandos que não são instruções Transact-SQLTransact-SQL, mas que são reconhecidos pelos utilitários sqlcmd e osql e pelo Editor de Códigos SQL Server Management StudioSQL Server Management Studio. SQL ServerSQL Server provides commands that are not Transact-SQLTransact-SQL statements, but are recognized by the sqlcmd and osql utilities and SQL Server Management StudioSQL Server Management Studio Code Editor. Estes comandos podem ser usados para facilitar a legibilidade e a execução de lotes e scripts.These commands can be used to facilitate the readability and execution of batches and scripts.

O GO sinaliza o término de um lote de instruções Transact-SQLTransact-SQL para os utilitários do SQL ServerSQL Server.GO signals the end of a batch of Transact-SQLTransact-SQL statements to the SQL ServerSQL Server utilities.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax


GO [count]  

ArgumentosArguments

contagemcount
É um número inteiro positivo.Is a positive integer. O lote que precede GO será executado pelo número de vezes especificado.The batch preceding GO will execute the specified number of times.

RemarksRemarks

O GO não é uma instrução Transact-SQLTransact-SQL, ele é um comando reconhecido pelos utilitários sqlcmd e osql e pelo Editor de Códigos SQL Server Management StudioSQL Server Management Studio.GO is not a Transact-SQLTransact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management StudioSQL Server Management Studio Code editor.

Os utilitários SQL ServerSQL Server interpretam GO como um sinal de que eles devem enviar o lote atual de instruções Transact-SQLTransact-SQL para uma instância do SQL ServerSQL Server. SQL ServerSQL Server utilities interpret GO as a signal that they should send the current batch of Transact-SQLTransact-SQL statements to an instance of SQL ServerSQL 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.The current batch of statements is composed of all statements entered since the last GO, or since the start of the ad hoc session or script if this is the first GO.

Uma instrução Transact-SQLTransact-SQL não pode ocupar a mesma linha que um comando GO.A Transact-SQLTransact-SQL statement cannot occupy the same line as a GO command. No entanto, a linha pode conter comentários.However, the line can contain comments.

Os usuários precisam seguir as regras de lotes.Users must follow the rules for batches. Por exemplo, qualquer execução de um procedimento armazenado depois da primeira instrução em um lote deve incluir a palavra-chave EXECUTE.For example, any execution of a stored procedure after the first statement in a batch must include the EXECUTE keyword. 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.The scope of local (user-defined) variables is limited to a batch, and cannot be referenced after a GO command.

USE AdventureWorks2012;  
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 ServerSQL Server podem enviar várias instruções Transact-SQLTransact-SQL a uma instância de SQL ServerSQL Server para execução como lote. SQL ServerSQL Server applications can send multiple Transact-SQLTransact-SQL statements to an instance of SQL ServerSQL Server for execution as a batch. As instruções em lote são compiladas em um único plano de execução.The statements in the batch are then compiled into a single execution plan. Os programadores que executam instruções ad hoc em utilitários do SQL ServerSQL Server, ou que compilam scripts de instruções Transact-SQLTransact-SQL a serem executados por meio dos utilitários do SQL ServerSQL Server, usam GO para sinalizar o término de um lote.Programmers executing ad hoc statements in the SQL ServerSQL Server utilities, or building scripts of Transact-SQLTransact-SQL statements to run through the SQL ServerSQL Server utilities, use GO to signal the end of a batch.

Os aplicativos baseados em APIs ODBC ou OLE DB recebem um erro de sintaxe quando tentam executar um comando GO.Applications based on the ODBC or OLE DB APIs receive a syntax error if they try to execute a GO command. Os utilitários do SQL ServerSQL Server nunca enviam um comando GO ao servidor.The SQL ServerSQL Server utilities never send a GO command to the server.

Não use um ponto e vírgula como terminador de instrução depois de GO.Do not use a semicolon as a statement terminator after GO.

PermissõesPermissions

GO é um comando de utilitário que não exige nenhuma permissão.GO is a utility command that requires no permissions. Pode ser executado por qualquer usuário.It can be executed by any user.

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

ExemplosExamples

O exemplo a seguir cria dois lotes.The following example creates two batches. O primeiro lote contém apenas uma instrução USE AdventureWorks2012 para definir o contexto do banco de dados.The first batch contains only a USE AdventureWorks2012 statement to set the database context. As instruções restantes usam uma variável local.The remaining statements use a local variable. Portanto, todas as declarações de variável local devem ser agrupadas em um único lote.Therefore, all local variable declarations must be grouped in a single batch. Isso é feito sem que haja um comando GO até depois da última instrução que faz referência à variável.This is done by not having a GO command until after the last statement that references the variable.

USE AdventureWorks2012;  
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.The following example executes the statements in the batch twice.

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