Instrucciones de utilidades de SQL Server: GO
Se aplica a: SQL Server Base de datos de Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Punto de conexión de análisis SQL en Microsoft Fabric Almacén en Microsoft Fabric
SQL Server proporciona comandos que no son instrucciones de Transact-SQL, pero que las utilidades sqlcmd y osql, y el Editor de código de SQL Server Management Studio sí reconocen. Estos comandos se pueden usar para facilitar la legibilidad y la ejecución de lotes y scripts.
GO indica a las utilidades de SQL Server el final de un lote de instrucciones Transact-SQL.
Convenciones de sintaxis de Transact-SQL
Sintaxis
GO [count]
Argumentos
count
Es un entero positivo. El lote que precede a GO se ejecutará el número especificado de veces.
Observaciones
GO no es una instrucción Transact-SQL, sino un comando reconocido por las utilidades sqlcmd y osql, así como por el Editor de código de SQL Server Management Studio.
Las utilidades de SQL Server interpretan GO como una señal de que deben enviar el lote actual de instrucciones Transact-SQL a una instancia de SQL 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.
Una instrucción Transact-SQL no puede ocupar la misma línea que un comando GO. Sin embargo, la línea sí puede contener comentarios.
Los usuarios deben seguir las reglas de los lotes. 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. 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.
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
Las aplicaciones de SQL Server pueden enviar varias instrucciones Transact-SQL a una instancia de SQL Server para su ejecución como un lote. En ese momento, las instrucciones del lote se compilan en un único plan de ejecución. Los programadores que ejecutan instrucciones ad hoc en las utilidades de SQL Server o que generan Scripts de instrucciones Transact-SQL para ejecutarlas a través de las utilidades de SQL Server utilizan el comando GO para indicar el final de un lote.
Las aplicaciones basadas en las API de ODBC u OLE DB reciben un error de sintaxis al intentar ejecutar un comando GO. Las utilidades de SQL Server nunca envían un comando GO al servidor.
No use un punto y coma como terminador de instrucción después de GO.
-- Yields an error because ; is not permitted after GO
SELECT @@VERSION;
GO;
En el editor de consultas SQL del portal de Microsoft Fabric, cada instrucción SQL se ejecuta como una sesión independiente. El contexto de sesión no persiste en las instrucciones SQL. Para más información, consulte Editor de consultas SQL.
Permisos
GO es un comando de utilidad que no requiere permisos. Cualquier usuario puede ejecutarlo.
Ejemplos
En el siguiente ejemplo se crean dos lotes. El primer lote solo contiene una instrucción USE AdventureWorks2022
para establecer el contexto de base de datos. Las instrucciones restantes utilizan una variable local. Por lo tanto, es necesario agrupar todas las declaraciones de variable locales en un único lote. Esto se logra al no usar el comando GO
hasta después de la última instrucción que hace referencia a la variable.
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
En el siguiente ejemplo ejecutan las instrucciones del lote dos veces.
SELECT DB_NAME();
SELECT USER_NAME();
GO 2