utilizo ADO.NET, así como la utilidad sqlcmd para enviar secuencias de comandos SQL a SQL Server 2008. ¿Cuál es la diferencia entre usar ;
y GO
para separar trozos de SQL?¿Cuál es la diferencia entre ";" y "IR" en T-SQL?
Respuesta
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.
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.
Pensé que; carácter separa una lista de comandos SQL, GO solo indica a SQL Server que confirme todos los comandos anteriores.
'GO' se utiliza normalmente para indicar el final de un lote de sentencias SQL que significa que usted podría tener un begin transaction
end 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.
"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.
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
Bajo SQL Server TSQL (2005-2016) tener en cuenta que:
- punto y coma (;) es un bloque de terminador.
- GO es un lote terminador.
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.
- 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.
- 1. ¿Cuál es la diferencia entre "aspnet_regiis -ir" y "aspnet_regiis -iru"?
- 2. ¿Cuál es la diferencia entre + = y = +?
- 3. ¿cuál es la diferencia entre:.! y: r !?
- 4. ¿Cuál es la diferencia entre ".equals" y "=="?
- 5. Cuál es la diferencia entre $ y jQuery
- 6. Cuál es la diferencia entre = y: =
- 7. Cuál es la diferencia entre $ (...) y `...`
- 8. ¿Cuál es la diferencia entre dict() y {}?
- 9. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 10. ¿Cuál es la diferencia entre {0} y ""?
- 11. ¿Cuál es la diferencia entre .ToString (+) y ""
- 12. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 13. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 14. ¿Cuál es la diferencia entre " " y ""?
- 15. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 16. ¿Cuál es la diferencia entre MacVim y Vim?
- 17. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 18. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 19. ¿Cuál es la diferencia entre System.Linq.Enumerable.WhereListIterator & System.Linq.Enumerable.WhereSelectListIterator?
- 20. ¿Cuál es la diferencia entre Session.Abandon() y Session.Clear() en ASP.Net?
- 21. ¿cuál es la diferencia entre didselectrowindexpath y willselectrowindexpath en iphone?
- 22. ¿cuál es la diferencia entre NULL y Empty en mysql
- 23. ¿Cuál es la diferencia entre longblob y longtext en mysql?
- 24. ¿Cuál es la diferencia entre $ @ y $ * en scripts de shell?
- 25. ¿Cuál es la diferencia entre flush y commit en Hibernate?
- 26. ¿Cuál es la diferencia entre iTerm2 y Terminal en Mac?
- 27. ¿Cuál es la diferencia entre @ y @@ en un módulo?
- 28. ¿Cuál es la diferencia entre & y && en MATLAB?
- 29. ¿Cuál es la diferencia entre _isEnabled y isEnabled en Anguila?
- 30. ¿Cuál es la diferencia entre referencias y objetos en Java?
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 –