He visto personas usar la declaración GO entre lotes de código SQL, pero AFAICS no es obligatorio (SQL Server 2008). ¿Cuáles son los beneficios de usar sentencias GO entre lotes/conjuntos de sentencias de SQL?Servidor SQL: ¿Necesito usar declaraciones GO entre lotes?
Respuesta
No son estrictamente necesarios, solo son instrucciones para que SQL Server Management Studio ejecute las declaraciones hasta este momento y luego continúe. GO
es no una palabra clave T-SQL o algo así, es solo una instrucción que funciona en SSMS.
A veces, necesita un IR - e.g. si agrega una columna a una tabla y luego desea volver a seleccionarla, debe tener un GO entre la adición de la columna y la consulta de la misma.
E.g. si intenta ejecutar este, obtendrá errores de SSMS:
ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5
Resultados: en
Msg 207, nivel 16, estado 1, línea 9 nombre de columna no válido 'datetimestamp'.
El punto es: SSMS está tratando de verificar toda la instrucción a la vez, pero en la instrucción SELECT, se quejará de la columna DateTimeStamp
que falta.
ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
GO
SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5
Si se pone un GO
entre los dos estados, que va a trabajar, porque no va a SSMS analizar y verificar toda la declaración antes de tiempo - que va a hacer la primera parte, y sólo entonces analizar el segundo (después del GO
).
Pero a excepción de situaciones como esta, GO casi nunca es necesario.
Solo es obligatorio en las herramientas de SQL decirle a SSMS dónde está el inicio y el final del lote. También se requiere para algunas declaraciones como CREATE TRIGGER que debe ser la primera en el lote
Por ejemplo, en una llamada a C# a SQL Server no tiene sentido
- 1. lotes vs instrucción SQL
- 2. ¿Cómo ejecutar SQL con comentarios y declaraciones GO usando SqlConnection?
- 3. Sincronización entre Servidor Sql y Servidor Mysql
- 4. Variables globales con GO
- 5. Declaraciones condicionales en archivos por lotes
- 6. ¿Cuál es la diferencia entre; y GO en procedimiento almacenado en SQL Server?
- 7. Necesito combinar el resultado común de dos declaraciones de selección
- 8. ¿Hay alguna diferencia entre usar múltiples declaraciones if y declaraciones if if?
- 9. Envolviendo declaraciones múltiples entre llaves
- 10. ¿Cuándo debería usar closeCursor() para las declaraciones PDO?
- 11. ¿Es necesario mysql_real_escape_string() al usar declaraciones preparadas?
- 12. ¿Qué permiso necesito para usar SqlBulkCopy en SQL Server 2008?
- 13. ¿Cómo usar LiteIDE para un proyecto Go?
- 14. ¿Cómo configuro Go para usar un proxy?
- 15. SQL Server 2008 - Capturando todas las declaraciones SQL Alcanzando el servidor
- 16. PHP: declaraciones preparadas (novato), solo necesito confirmar esto sobre la inyección SQL
- 17. En SQL Server, ¿cuándo debería usar GO y cuándo debería usar punto y coma?
- 18. De .net ¿cómo enviar muchos "lotes" de SQL al servidor Sql sin muchas vueltas?
- 19. Desarrollador PL/SQL: ¿declaraciones múltiples?
- 20. ¿Inyecciones SQL con declaraciones preparadas?
- 21. Servidor SQL: ¿cómo permisos de esquemas?
- 22. Necesito ayuda para escribir un archivo bat que ejecute scripts sql en (sql server 2008 y otros 3 archivos.?
- 23. Inserciones SQL por lotes en .NET
- 24. ¿Usar transacciones para declaraciones seleccionadas?
- 25. ¿Cuándo * no * usar declaraciones preparadas?
- 26. Diferencia entre Enum y Definir declaraciones
- 27. ¿Cómo funcionan las declaraciones SQL EXISTS?
- 28. ¿Por qué debería usar el comando GO en sybase?
- 29. LINQ a SQL por lotes borrar
- 30. ¿Cuál es la diferencia de alcance de cierre entre declaraciones de variables cortas y largas en Go?