transact examples ejemplos descargar comandos tsql

tsql - examples - ¿Qué es un "lote" y por qué se usa GO?



transact sql mysql (6)

Como todos dijeron, "IR" no es parte de T-SQL. "IR" es un separador de lotes en SSMS , una aplicación cliente utilizada para enviar consultas a la base de datos. Esto significa que las variables declaradas y las variables de tabla no persistirán desde el código antes del "IR" al código que lo sigue.

De hecho, GO es simplemente la palabra predeterminada utilizada por SSMS. Esto se puede cambiar en las opciones si lo desea. Por un poco de diversión, cambie la opción en el sistema de otra persona para usar "SELECCIONAR" como un separador por lotes en lugar de "IR". Perdona mi risa cruel.

He leído y leído MSDN, etc. Ok, entonces señala el final de un lote.

¿Qué define un lote? No veo por qué necesito ir cuando estoy pegando en un conjunto de scripts para ejecutarlos todos al mismo tiempo.

Nunca entendí GO. ¿Alguien puede explicar esto mejor y cuándo debo usarlo (después de cuántas o qué tipo de transacciones)?

Por ejemplo, ¿por qué necesitaría IR luego de cada actualización aquí?

UPDATE [Country] SET [CountryCode] = ''IL'' WHERE code = ''IL'' GO UPDATE [Country] SET [CountryCode] = ''PT'' WHERE code = ''PT''


En ocasiones es necesario ejecutar el mismo comando o conjunto de comandos una y otra vez. Esto puede ser para insertar o actualizar los datos de prueba o puede ser una carga para su servidor para las pruebas de rendimiento. Cualquiera sea la necesidad, la manera más fácil de hacerlo es configurar un bucle while y ejecutar su código, pero en SQL 2005 hay una manera aún más fácil de hacerlo.

Supongamos que quiere crear una tabla de prueba y cargarla con 1000 registros. Puede emitir el siguiente comando y ejecutará el mismo comando 1000 veces:

CREATE TABLE dbo.TEST (ID INT IDENTITY (1,1), ROWID uniqueidentifier) GO INSERT INTO dbo.TEST (ROWID) VALUES (NEWID()) GO 1000

fuente: http://www.mssqltips.com/tip.asp?tip=1216

Aparte de eso, marca el "final" de un bloque de SQL (por ejemplo, en un procedimiento almacenado) ... Lo que significa que está en un estado "limpio" de nuevo ... eG: Parámetros utilizados en la declaración antes de que el código se restablezca ( no definido más)


Muchos comandos necesitan estar en su propio lote, como CREATE PROCEDURE

O bien, si agrega una columna a una tabla, entonces debería estar en su propio lote. Si intentas SELECCIONAR la nueva columna en el mismo lote, falla porque en el momento de analizar / compilar la columna no existe.

GO es utilizado por las herramientas SQL para resolver esto desde un script: no es una palabra clave SQL y el motor no lo reconoce.

Estos son 2 ejemplos concretos del uso diario de lotes.

Editar: en su ejemplo, no necesita GO ...

Editar 2, ejemplo. No puede soltar, crear y autorizar en un lote ... no menos importante, ¿dónde está el final del procedimiento almacenado?

IF OBJECT_ID (''dbo.uspDoStuff'') IS NOT NULL DROP PROCEDURE dbo.uspDoStuff GO CREATE PROCEDURE dbo.uspDoStuff AS SELECT Something From ATable GO GRANT EXECUTE ON dbo.uspDoStuff TO RoleSomeOne GO


Se usa para dividir bloques lógicos. Su código se interpreta en la línea de comandos sql y esto indica el siguiente bloque de código.

Pero podría usarse como declaración recursiva con un número específico.

Tratar:

exec sp_who2 go 2

Algunas declaraciones deben estar delimitadas por GO:

use DB create view thisViewCreationWillFail


GO no es correctamente un comando TSQL.

En su lugar, es un comando para el programa específico del cliente que se conecta a un servidor SQL (Sybase o Microsoft, no está seguro de lo que hace Oracle), indicando al programa cliente que el conjunto de comandos que se ingresaron hasta el "ir" necesita para ser enviado al servidor para ser ejecutado.

¿Por qué / cuándo lo necesitas?

  • GO en el servidor MS SQL tiene un parámetro de "conteo", por lo que puede usarlo como un acceso directo "repetir N veces".

  • Las actualizaciones extremadamente grandes pueden llenar el registro del servidor SQL. Para evitar eso, podrían necesitar separarse en lotes más pequeños a través de go .

    En su ejemplo, si la actualización de un conjunto de códigos de país tiene tal volumen que se quedará sin espacio de registro, la solución es separar cada código de país en una transacción separada, lo que se puede hacer separándolos en el cliente con go .

  • Algunas sentencias SQL DEBEN estar separadas por GO de las siguientes para que funcionen.

    Por ejemplo, no puede descartar una tabla y volver a crear la tabla con el mismo nombre en una sola transacción, al menos en Sybase (lo mismo para crear procedimientos / activadores):

> drop table tempdb.guest.x1 > create table tempdb.guest.x1 (a int) > go Msg 2714, Level 16, State 1 Server ''SYBDEV'', Line 2 There is already an object named ''x1'' in the database. > drop table tempdb.guest.x1 > go > create table tempdb.guest.x1 (a int) > go >


GO no es una declaración, es un separador de lotes.

Los bloques separados por GO son enviados por el cliente al servidor para su procesamiento y el cliente espera por sus resultados.

Por ejemplo, si escribes

DELETE FROM a DELETE FROM b DELETE FROM c

, esto se enviará al servidor como una única consulta de 3 líneas.

Si tú escribes

DELETE FROM a GO DELETE FROM b GO DELETE FROM c

, esto se enviará al servidor como 3 consultas de una línea.

GO no va al servidor (sin juego de palabras). Es una palabra reservada pura del lado del cliente y solo es reconocida por SSMS y osql .

Si va a utilizar una herramienta de consulta personalizada para enviarla a través de la conexión, el servidor ni siquiera la reconocerá y emitirá un error.