Descripción de lotes

Completado

Los lotes de T-SQL son colecciones de una o varias instrucciones T-SQL que un cliente envía a SQL Server como una sola unidad. SQL Server se ejecuta en todas las instrucciones de un lote al mismo tiempo al analizar, optimizar y ejecutar el código.

Si es un escritor de informes que normalmente escribe consultas mediante instrucciones SELECT y no procedimientos, sigue siendo importante comprender los límites del lote. Estos límites afectan al trabajo con variables y parámetros en procedimientos almacenados y otras rutinas. Por ejemplo, una variable debe declararse en el mismo lote en el que se hace referencia. Es importante, por lo tanto, reconocer lo que se incluye en un lote.

La aplicación cliente delimita los lotes. La forma de marcar el final de un lote depende de la configuración del cliente. Para los clientes de Microsoft, incluidos SQL Server Management Studio (SSMS) y SQLCMD, la palabra clave es GO.

En este ejemplo, hay dos lotes distintos que finalizan cada uno con una GO instrucción :

CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO

El terminador de lote GO no es una palabra clave T-SQL, pero SSMS reconoce uno para indicar el final de un lote.

Tenga en cuenta dos consideraciones importantes al trabajar con lotes de T-SQL:

  • Los lotes son límites para el ámbito de variable, lo que significa que solo otro código del mismo lote puede hacer referencia a una variable definida en un lote.
  • Algunas instrucciones, normalmente instrucciones de definición de datos como CREATE VIEW, CREATE FUNCTIONy CREATE PROCEDURE no se pueden combinar con otras en el mismo lote.

Trabajar con lotes

Un lote es una colección de instrucciones T-SQL enviadas a SQL Server para analizar y ejecutar. Comprender cómo se analizan los lotes es útil para identificar los mensajes de error y el comportamiento. Cuando un cliente envía un lote, como cuando se presiona el botón Ejecutar en SSMS, el lote se analiza para detectar errores de sintaxis por parte del motor de SQL Server. Los errores encontrados hacen que se rechace todo el lote; no hay ejecución parcial de instrucciones dentro del lote.

Si el lote pasa la comprobación de sintaxis, SQL Server ejecuta otros pasos, resolviendo nombres de objeto, comprobando permisos y optimizando el código para su ejecución. Una vez que este proceso se completa y comienza la ejecución, las instrucciones tienen éxito o fracasan individualmente. Este es un contraste importante a la comprobación de sintaxis. Cuando se produce un error en tiempo de ejecución en una línea, la línea siguiente todavía se puede ejecutar, a menos que agregue control de errores al código.

Por ejemplo, el siguiente lote contiene un error de sintaxis:

INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO

Proporciona este mensaje de error:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.

El error se produjo en la línea 1, pero se rechaza todo el lote y la ejecución no continúa con la línea 2. Aunque se invirtiera cada una de las instrucciones INSERT y se produjese el error de sintaxis en la segunda línea, la primera línea no se ejecutaría porque se rechazaría todo el lote.

Por el contrario, este lote corregido no contiene un error:

INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO

Los ejemplos anteriores usan INSERT instrucciones en lugar de SELECT porque las instrucciones de modificación se agrupan con más frecuencia en lotes.