Instrucciones de utilidades de SQL Server: GOSQL Server Utilities Statements - GO

SE APLICA A: síSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

SQL ServerSQL Server proporciona comandos que no son instrucciones de Transact-SQLTransact-SQL, pero que las utilidades sqlcmd y osql, y el Editor de código de SQL Server Management StudioSQL Server Management Studio sí reconocen.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. Estos comandos se pueden usar para facilitar la legibilidad y la ejecución de lotes y scripts.These commands can be used to facilitate the readability and execution of batches and scripts.

GO indica a las utilidades de Transact-SQLTransact-SQL el final de un lote de instrucciones SQL ServerSQL Server.GO signals the end of a batch of Transact-SQLTransact-SQL statements to the SQL ServerSQL Server utilities.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

GO [count]  

ArgumentosArguments

countcount
Es un entero positivo.Is a positive integer. El lote que precede a GO se ejecutará el número especificado de veces.The batch preceding GO will execute the specified number of times.

ObservacionesRemarks

GO no es una instrucción Transact-SQLTransact-SQL, sino un comando reconocido por las utilidades sqlcmd y osql, así como por el Editor de código de 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.

Las utilidades de SQL ServerSQL Server interpretan GO como una señal de que deben enviar el lote actual de instrucciones Transact-SQLTransact-SQL a una instancia de 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. El lote actual de instrucciones está formado por todas las instrucciones especificadas desde el último comando GO o desde el comienzo de la sesión o script ad hoc si se trata del primer comando 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.

Una instrucción Transact-SQLTransact-SQL no puede ocupar la misma línea que un comando GO.A Transact-SQLTransact-SQL statement cannot occupy the same line as a GO command. Sin embargo, la línea sí puede contener comentarios.However, the line can contain comments.

Los usuarios deben seguir las reglas de los lotes.Users must follow the rules for batches. Por ejemplo, la ejecución de un procedimiento almacenado después de la primera instrucción de un lote debe incluir la palabra clave EXECUTE.For example, any execution of a stored procedure after the first statement in a batch must include the EXECUTE keyword. El ámbito de las variables locales (definidas por el usuario) está limitado a un lote y no es posible referirse a ellas después del 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  

Las aplicaciones de SQL ServerSQL Server pueden enviar varias instrucciones Transact-SQLTransact-SQL a una instancia de SQL ServerSQL Server para su ejecución como un lote.SQL ServerSQL Server applications can send multiple Transact-SQLTransact-SQL statements to an instance of SQL ServerSQL Server for execution as a batch. En ese momento, las instrucciones del lote se compilan en un único plan de ejecución.The statements in the batch are then compiled into a single execution plan. Los programadores que ejecutan instrucciones ad hoc en las utilidades de SQL ServerSQL Server o que generan Scripts de instrucciones Transact-SQLTransact-SQL para ejecutarlas a través de las utilidades de SQL ServerSQL Server utilizan el comando GO para indicar el final de un 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.

Las aplicaciones basadas en las API de ODBC u OLE DB reciben un error de sintaxis al intentar ejecutar un comando GO.Applications based on the ODBC or OLE DB APIs receive a syntax error if they try to execute a GO command. Las utilidades de SQL ServerSQL Server nunca envían un comando GO al servidor.The SQL ServerSQL Server utilities never send a GO command to the server.

No use un punto y coma como terminador de instrucción después de GO.Do not use a semicolon as a statement terminator after GO.

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

PermisosPermissions

GO es un comando de utilidad que no requiere permisos.GO is a utility command that requires no permissions. Cualquier usuario puede ejecutarlo.It can be executed by any user.

EjemplosExamples

En el siguiente ejemplo se crean dos lotes.The following example creates two batches. El primer lote solo contiene una instrucción USE AdventureWorks2012 para establecer el contexto de base de datos.The first batch contains only a USE AdventureWorks2012 statement to set the database context. Las instrucciones restantes utilizan una variable local.The remaining statements use a local variable. Por lo tanto, es necesario agrupar todas las declaraciones de variable locales en un único lote.Therefore, all local variable declarations must be grouped in a single batch. Esto se logra al no usar el comando GO hasta después de la última instrucción que hace referencia a la variable.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  

En el siguiente ejemplo ejecutan las instrucciones del lote dos veces.The following example executes the statements in the batch twice.

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