2010-05-25 9 views
19

Soy nuevo en TSQL y me pregunto qué significa realmente la declaración GO. Para mí, parece arrojado allí donde parece encajar.¿Cuál es el significado de la instrucción GO en TSQL

Supongo que de alguna manera le dice al servidor sql que ejecute la instrucción anterior? ¿Qué pasa si no los usas en absoluto? ¿Podría alguien dar un ejemplo donde una declaración se romperá si no uso un GO.

Por favor, elabore.

+0

posible duplicado de [T-SQL GO Statement] (http://stackoverflow.com/questions/2668529/t-sql-go-statement) – Thomas

Respuesta

14

Es un terminador de lote

esto va a romper

declare @i int 
set @i =5 

declare @i int 
set @i =6 

Select @i 

Msg 134, nivel 15, estado 1, línea 5 El nombre de la variable '@i' ya ha sido declarada. Los nombres de las variables deben ser únicos dentro de un lote de consulta o procedimiento almacenado.

esto funcionará

declare @i int 
set @i =5 

go 
declare @i int 
set @i =6 

Select @i 
10

Finaliza el lote.

Raramente se necesita y se usa con mucha más frecuencia de lo que debería. Un lugar válido es en la programación de procuración almacenada donde primero se realiza una comprobación si existe el proceso y se descarta si no es así. Luego usa una instrucción go para finalizar el lote porque la instrucción create proc debe ser la primera declaración de un lote.

+1

Otro lugar válido y común es con los comandos ALTER VIEW en su TSQL. ''ALTER VIEW' debe ser la única declaración en el lote'. Es decir, necesita un 'GO 'antes y después de ALTER VIEW. – mmcrae

6

Por cierto. En realidad, no es un comando TSQL. Las herramientas de DB de Microsoft solo las utilizan para separar dos lotes de comandos.

De hecho, puede configurarlo para que sea una palabra diferente en SSMS si lo desea en las Opciones ... Configuración de preferencia de separación de lote.

El principal lugar donde esta distinción es importante es que SQL bloqueará en la declaración GO si intenta usarlos en consultas a través de una conexión de base de datos desde el código, por ejemplo a través de ADO.NET.

Cuestiones relacionadas