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 afectarán 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), Azure Data Studio y SQLCMD, la palabra clave es GO.

En este ejemplo, hay dos lotes distintos que finalizan cada uno con una go:

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.

Al trabajar con lotes de T-SQL, hay dos consideraciones importantes que debe tener en cuenta:

  • 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.
  • Es posible que algunas instrucciones, típicamente de definición de datos, como CREATE VIEW, CREATE FUNCTION y CREATE PROCEDURE, no se combinen con otras en el mismo bloque de datos.

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 será ú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 harán que se rechace todo el lote; no habrá ninguna 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, se puede ejecutar la línea siguiente, a menos que haya agregado 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. Incluso si se invierte cada una de las instrucciones INSERT y se produjo el error de sintaxis en la segunda línea, la primera línea no se ejecutaría porque se rechazaría todo el lote.

Con el ejemplo anterior, este lote no contiene un error:

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

En los ejemplos anteriores, hemos usado instrucciones INSERT en lugar de SELECT porque es más común que las instrucciones de modificación se agrupe en lotes que las instrucciones SELECT.