2009-10-04 20 views

Respuesta

50

GO no es en realidad un comando T-SQL. El comando GO fue introducido por las herramientas de Microsoft como una forma de separar las instrucciones de proceso por lotes, como el final de un procedimiento almacenado. GO es compatible con las herramientas de pila de Microsoft SQL, pero no forma parte formal de otras herramientas.

No puede poner un GO en una cadena de SQL y enviarlo como parte de un objeto de comando ADO.NET, ya que SQL no comprende el término. Otra forma de demostrar esto es con el generador de perfiles: configure algunas declaraciones que usan GO en Query Analyzer/Management Studio y luego ejecute el generador de perfiles cuando lo ejecute. Verá que se emiten como comandos separados para el servidor.

El punto y coma se utiliza para indicar el final de una declaración en sí misma, no necesariamente un lote completo.

http://msdn.microsoft.com/en-us/library/ms188037.aspx

+0

Inicié una conexión para intentar que GO sea un comando t-sql válido: https://connect.microsoft.com/SQLServer/feedback/details/3138257/make-go-a-first-class- idioma-palabra clave –

21

punto y coma es un separador de instrucciones. La declaración anterior (s) no se ejecuta necesariamente cuando se encuentra un punto y coma.

GO 

Significa el final de un lote. Ejecuta el lote anterior de instrucciones, al igual que encontrar el final del bloque.

GO 2 

Significa ejecutar el lote tantas veces. Creo que he usado esa opción quizás dos veces en mi vida. Por otra parte, no soy un DBA de oficio.

0

Pensé que; carácter separa una lista de comandos SQL, GO solo indica a SQL Server que confirme todos los comandos anteriores.

4

'GO' se utiliza normalmente para indicar el final de un lote de sentencias SQL que significa que usted podría tener un begin transactionend transaction y envuelto en una sola colección de declaraciones que podrían fracasar o tener éxito juntos.

';' generalmente se usa para separar múltiples declaraciones SQL entre sí. Esto es notorio en scripts SQL que necesitan devolver múltiples conjuntos de registros, como `select * from table1; seleccione * de la tabla2; ' lo que resultaría en dos conjuntos de registros por separado del lado del cliente.

27

"IR" es similar a; en muchos casos, pero de hecho significa el final de un lote.

Cada lote se comete cuando el "IR" afirmación se llama, por lo que si usted tiene:

SELECT * FROM table-that-does-not-exist; 
SELECT * FROM good-table; 

en su lote, entonces la buena mesa seleccionar nunca conseguirá llamado porque la primera selecto causará una error.

Si en vez tuvo:

SELECT * FROM table-that-does-not-exist 
GO 
SELECT * FROM good-table 
GO 

La primera instrucción de selección todavía provoca un error, pero dado que la segunda instrucción está en su propio lote, todavía se ejecutará.

GO no tiene nada que ver con la confirmación de una transacción.

1

El GO comando significa el final de un lote. lo tanto, todas las variables declaradas antes de IR no son válidos después de la orden GO. Contra el punto y coma no termina el lote.

Si va a utilizar un comando DML en un procedimiento, utilice el punto y coma en lugar de ir. Por ejemplo:

CREATE PROCEDURE SpMyProc 
@myProcParam VARCHAR(20) 
AS 
DECLARE @myOtherParam INT = 5 
;DISABLE TRIGGER ALL ON tMyTable 
UPDATE tMyTable SET myVar = @myProcParam, mySecondVar = @myOtherParam 
;ENABLE TRIGGER OLL ON tMyTable 
2
  1. Bajo SQL Server TSQL (2005-2016) tener en cuenta que:

    • punto y coma (;) es un bloque de terminador.
    • GO es un lote terminador.
  2. Además, ir se puede utilizar para invocar el mismo bloque DML varias veces utilizando la siguiente sintaxis:

GO [count]

Donde [count] es un número entero positivo que indica cuántas veces el bloque TSQL de comandos anteriores dijo GO deben ser llevado a cabo una y otra vez.

  1. Además, a diferencia de punto y coma, GO es obligatoria antes de una nueva DDL, por ejemplo, cuando se crea un nuevo punto de vista, desde un punto y coma que separa los comandos anteriores se disparará un error. Por ejemplo:

vista gota #temporary_view
GO
crear vista #another_view ...
-> NO ERRORES

Si se ha sustituido GO con un punto y coma en el ejemplo anterior, lo hará elevar el siguiente mensaje de error:

'CREATE VIEW' debe ser la primera instrucción de un lote de consultas.

Cuestiones relacionadas