Lotes de instrucciones SQL

Un lote de instrucciones SQL es un grupo de dos o más instrucciones SQL o una sola instrucción SQL que tiene el mismo efecto que un grupo de dos o más instrucciones SQL. En algunas implementaciones, se ejecuta toda la instrucción del lote antes de que haya resultados disponibles. Esto suele ser más eficaz que enviar instrucciones por separado, ya que el tráfico de red a menudo se puede reducir y el origen de datos a veces puede optimizar la ejecución de un lote de instrucciones SQL. En las demás implementaciones, la llamada a SQLMoreResults desencadena la ejecución de la siguiente instrucción en el lote. ODBC admite los siguientes tipos de lotes:

  • Lotes explícitos Un lote explícito es dos o más instrucciones SQL separadas por punto y coma (;). Por ejemplo, el siguiente lote de instrucciones SQL abre un nuevo pedido de venta. Esto requiere insertar filas en las tablas Orders y Lines. Tenga en cuenta que no hay punto y coma después de la última instrucción.

    INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)  
       VALUES (2002, 1001, {fn CURDATE()}, 'Garcia', 'OPEN');  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 1, 1234, 10);  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 2, 987, 8);  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 3, 566, 17);  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 4, 412, 500)  
    
  • Procedimientos Si un procedimiento contiene más de una instrucción SQL, se considera un lote de instrucciones SQL. Por ejemplo, la siguiente instrucción específica de SQL Server crea un procedimiento que devuelve un conjunto de resultados que contiene información sobre un cliente y un conjunto de resultados que enumera todos los pedidos de ventas abiertos para ese cliente:

    CREATE PROCEDURE GetCustInfo (@CustomerID INT) AS  
       SELECT * FROM Customers WHERE CustID = @CustomerID  
       SELECT OrderID FROM Orders  
          WHERE CustID = @CustomerID AND Status = 'OPEN'  
    

    La propia instrucción CREATE PROCEDURE no es un lote de instrucciones SQL. Sin embargo, el procedimiento que crea es un lote de instrucciones SQL. Ningún punto y coma separa las dos instrucciones SELECT porque la instrucción CREATE PROCEDURE es específica de SQL Server y SQL Server no requiere punto y coma para separar varias instrucciones en una instrucción CREATE PROCEDURE.

  • Matrices de parámetros Las matrices de parámetros de parámetros se pueden usar con una instrucción SQL parametrizada como una manera eficaz de realizar operaciones masivas. Por ejemplo, las matrices de parámetros se pueden usar con la siguiente instrucción INSERT para insertar varias filas en la tabla Lines mientras se ejecuta solo una instrucción SQL:

    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (?, ?, ?, ?)  
    

    Si un origen de datos no admite las matrices de parámetros, el controlador puede emularlos ejecutando la instrucción SQL una vez para cada conjunto de parámetros. Para obtener más información, consulte Parámetros de instrucciones y Matrices de valores de parámetro más adelante en esta sección.

Los distintos tipos de lotes no se pueden mezclar de forma interoperable. Es decir, depende del controlador la forma en que una aplicación determina el resultado de ejecutar un lote explícito que incluye llamadas a procedimiento, un lote explícito que usa matrices de parámetros y una llamada a procedimiento que usa matrices de parámetros.

Esta sección contiene los temas siguientes.