Lotes
Actualizado: 5 de diciembre de 2005
Un lote es un grupo de una o varias instrucciones Transact-SQL enviadas a la vez desde una aplicación a SQL Server 2005 para su ejecución. SQL Server compila las instrucciones de un lote en una sola unidad ejecutable, denominada plan de ejecución. Las instrucciones del plan de ejecución se ejecutan de una en una.
Un error de compilación, como un error de sintaxis, impide la compilación del plan de ejecución. Por lo tanto, no se ejecuta ninguna de las instrucciones del lote.
Un error en tiempo de ejecución, como un desbordamiento aritmético o una infracción de restricción, tiene uno de los siguientes efectos:
- La mayoría de los errores en tiempo de ejecución detienen la instrucción actual y las instrucciones que siguen en el lote.
- Algunos errores en tiempo de ejecución, como las infracciones de restricciones, sólo detienen la instrucción actual. Las restantes instrucciones del lote se ejecutan.
Las instrucciones ejecutadas antes de la instrucción en la que se encontró el error en tiempo de ejecución no se ven afectadas. La única excepción se produce cuando el lote se encuentra en una transacción y el error hace que ésta se revierta. En este caso, se revertirán todas las modificaciones de datos sin confirmar realizadas antes de que se produzca el error en tiempo de ejecución.
Por ejemplo, suponga que hay diez instrucciones en un lote. Si la quinta instrucción tiene un error de sintaxis, no se ejecutará ninguna de las instrucciones del lote. Si se compila el lote y la segunda instrucción produce un error mientras se está ejecutando, los resultados de la primera instrucción no se verán afectados porque ya se ha ejecutado.
SQL Server 2005 proporciona recompilación de instrucciones. Es decir, si una instrucción desencadena una nueva compilación, sólo se vuelve a compilar esa instrucción y no el lote completo. Este comportamiento difiere de SQL Server 2000. Considere el ejemplo siguiente que contiene una instrucción CREATE TABLE
y cuatro instrucciones INSERT
en el mismo lote.
CREATE TABLE dbo.t3(a int)
INSERT INTO dbo.t3 VALUES (1)
INSERT INTO dbo.t3 VALUES (1,1)
INSERT INTO dbo.t3 VALUES (3)
GO
SELECT * FROM dbo.t3
En primer lugar se compila el lote. Se compila la instrucción CREATE TABLE
pero, como la tabla dbo.t3
no existe todavía, las instrucciones INSERT
no se compilan.
En segundo lugar se empieza a ejecutar el lote. Se crea la tabla. La primera instrucción INSERT
se compila e inmediatamente se ejecuta. La tabla tiene ahora una fila. A continuación, se compila la segunda instrucción INSERT
. La compilación origina un error y el lote finaliza. La instrucción SELECT
devuelve una fila.
En SQL Server 2000, el lote se empieza a ejecutar y se crea la tabla. Las tres instrucciones INSERT
se compilan una a una pero no se ejecutan. Como la segunda instrucción INSERT
produce un error de compilación, el lote completo finaliza. La instrucción SELECT
no devuelve ninguna fila.
Reglas para utilizar lotes
La utilización de lotes sigue estas reglas:
- Las instrucciones CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, CREATE TRIGGER y CREATE VIEW no pueden combinarse con otras instrucciones de un lote. El lote debe empezar con una instrucción CREATE. Las siguientes instrucciones del lote se interpretarán como parte de la definición de la primera instrucción CREATE.
- No se puede cambiar una tabla y luego hacer referencia a las columnas nuevas en el mismo lote.
- Si una instrucción EXECUTE fuera la primera instrucción de un lote, no se necesitaría la palabra clave EXECUTE. La palabra clave EXECUTE es necesaria si la instrucción EXECUTE no es la primera instrucción del lote.
Importante: |
---|
Los archivos de proceso por lotes almacenan las credenciales como texto sin formato. Las credenciales pueden mostrarse en la pantalla del usuario durante la ejecución del lote. |
Vea también
Conceptos
Entorno de ejecución de lotes y MARS
Especificar lotes
Ejemplos de lotes
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
5 de diciembre de 2005 |
|