¿Para qué sirve GO en SQL Server Management Studio y Transact SQL?

363

SQL Server Management Studio siempre inserta un comando GO cuando creo una consulta usando el menú derecho "Script As". ¿Por qué? ¿Qué hace realmente GO?

tvanfosson
fuente
29
@ChrisF: eso no es un duplicado, aunque la respuesta aceptada también responde a esta pregunta. Esa pregunta es sobre el uso de "GO" en una transacción, simplemente resulta que no es realmente un comando SQL. Esta pregunta es mucho más general e intenta proporcionar una respuesta definitiva a las preguntas sobre el comando GO en SSMS.
tvanfosson
3
También eche un vistazo a este enlace: ¿Para qué sirven las declaraciones por lotes?
Zain Rizvi
Documentación de Microsoft: Declaraciones de utilidades de SQL Server - GO : el lote que precede a GO se ejecutará el número especificado de veces.
minutos

Respuestas:

304

Es un terminador de lotes, sin embargo, puede cambiarlo a lo que quiera texto alternativo

SQLMenace
fuente
80
gbn lo hace SELECCIONAR y mira lo que sucede :-)
SQLMenace
14
¡Gracias! Sin embargo, ¿cuál es el punto de la declaración GO? Esto puede sonar estúpido, pero ¿qué significa 'lote de código'? msdn dice que después de GO la vida útil de las variables caduca. No parece tener nada que ver con el compromiso de transacción, ¿verdad? ¿Hay alguna circunstancia en la que deba mantener la declaración GO en mis scripts?
kate1138
44
Significa que todos los T-SQL anteriores se ejecutarán "a la vez". Por lo que entiendo, es intercambiable con un punto y coma (OLEDB / Oracle). Por ejemplo, si tiene una secuencia de comandos posterior a la implementación grande, una instrucción GO entre líneas puede ayudar a la memoria utilizada en la secuencia de comandos.
Anthony Mason
44
Esta respuesta realmente no explica "lo que realmente hace" o el por qué
Andrew
Después de leer la respuesta de @tvanfosson: ¿Es realmente intercambiable con punto y coma?
El
299

Desde Management Studio 2005 parece que se puede usar GOcon un intparámetro, como:

INSERT INTO mytable DEFAULT VALUES
GO 10

Lo anterior insertará 10 filas en mytable. En términos generales, GOejecutará los comandos sql relacionados nveces .

MicSim
fuente
199

El comando GO no es una instrucción Transact-SQL, sino un comando especial reconocido por varias utilidades de MS, incluido el editor de código de SQL Server Management Studio.

El comando GO se usa para agrupar comandos SQL en lotes que se envían juntos al servidor. Los comandos incluidos en el lote, es decir, el conjunto de comandos desde el último comando GO o el inicio de la sesión, deben ser lógicamente consistentes. Por ejemplo, no puede definir una variable en un lote y luego usarla en otro ya que el alcance de la variable se limita al lote en el que está definida.

Para obtener más información, consulte http://msdn.microsoft.com/en-us/library/ms188037.aspx .

tvanfosson
fuente
37
¿En qué situación es GOrealmente útil agrupar cosas ?
nicodemus13
3
@ nicodemus13 Ver stackoverflow.com/questions/20711326/…
Zain Rizvi
44
entonces, si falla 1 declaración en el lote, ¿falla todo?
MonsterMMORPG
36

GO no es una palabra clave SQL.

Es un separador de lotes utilizado por las herramientas del cliente (como SSMS) para dividir todo el script en lotes

Respondió varias veces antes ... ejemplo 1

gbn
fuente
44
En mi defensa, revisé los duplicados sugeridos antes de enviar la pregunta, y su ejemplo no apareció, ni es realmente un duplicado, aunque la respuesta es aplicable.
tvanfosson
26
Es difícil buscar "IR" aquí :-)
gbn
20

Solo para agregar a las respuestas existentes, cuando crea vistas debe separar estos comandos en lotes usando go, de lo contrario obtendrá el error 'CREATE VIEW' must be the only statement in the batch. Entonces, por ejemplo, no podrá ejecutar el siguiente script sql singo

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2
Mykhailo Seniutovych
fuente
También crea procedimientos
Luciano Santos
2
Esta es la única respuesta que realmente aborda la primera parte de la pregunta del OP "... siempre inserta un comando GO ... ¿Por qué?". Parece, la mayoría de las veces, por miedo. El único momento que se requiere es cuando un comando debe estar en su propio lote.
bielawski
7

Ir significa que cualquier instrucción SQL que esté escrita antes y después de cualquier GO anterior, irá al servidor SQL para su procesamiento.

Select * from employees;
GO    -- GO 1

update employees set empID=21 where empCode=123;
GO    -- GO 2

En el ejemplo anterior, las declaraciones antes de GO 1 irán a sql sever en un lote y luego cualquier otra declaración antes de GO 2 irá al servidor sql en otro lote. Entonces, como vemos, ha separado lotes.

ANIL KUMAR
fuente
5
Use herDatabase
GO ; 

El código dice que ejecute las instrucciones sobre el GOmarcador. Mi base de datos predeterminada es myDatabase, por lo que en lugar de usar myDatabase GOy hace una consulta actual para usar herDatabase

TonyP
fuente
-8

Aquí está la magia de GO.

SELECT 'Go'
Go 10

SINTAXIS: Ir INT(BatchNumber)

BatchNumber: no se produjo ninguna de las veces

Parece simple, podría llevarte a Spaghetti si codificas más profundamente.

Ragul
fuente
esto intenta explicar la declaración GOTO como se usa en la programación (creo), como los scripts por lotes ... no tiene nada que ver con la declaración GO en SQL Server. GO generalmente no se usa con un INT, aunque puede hacerlo si desea procesar un lote N cantidad de veces ... así que no, esa no es la "magia" de GO. Se utiliza para separar un script en una serie de ejecuciones agrupadas, como se explica en las otras respuestas.
Heriberto Lugo