Delen via


Partijen van SQL-instructies

Een batch met SQL-instructies is een groep van twee of meer SQL-instructies of één SQL-instructie die hetzelfde effect heeft als een groep van twee of meer SQL-instructies. In sommige implementaties wordt de volledige batchinstructie uitgevoerd voordat er resultaten beschikbaar zijn. Dit is vaak efficiënter dan het afzonderlijk indienen van instructies, omdat netwerkverkeer vaak kan worden verminderd en de gegevensbron soms de uitvoering van een batch met SQL-instructies kan optimaliseren. In andere implementaties activeert het aanroepen van SQLMoreResults de uitvoering van de volgende instructie in de batch. ODBC ondersteunt de volgende typen batches:

  • Expliciete batches Een expliciete batch bestaat uit twee of meer SQL-instructies, gescheiden door puntkomma's (;). Met de volgende batch SQL-instructies wordt bijvoorbeeld een nieuwe verkooporder geopend. Hiervoor moeten rijen worden ingevoegd in zowel de Orders- als de Lijnentabellen. Houd er rekening mee dat er geen puntkomma achter de laatste instructie staat.

    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)  
    
  • Procedures Als een procedure meer dan één SQL-instructie bevat, wordt deze beschouwd als een batch met SQL-instructies. Met de volgende SQL Server-specifieke instructie maakt u bijvoorbeeld een procedure die een resultatenset retourneert met informatie over een klant en een resultatenset met alle openstaande verkooporders voor die klant:

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

    De instructie CREATE PROCEDURE zelf is geen batch van SQL-instructies. De procedure die wordt gemaakt, is echter een batch met SQL-instructies. De twee SELECT-instructies worden niet gescheiden door puntkomma's omdat de INSTRUCTIE CREATE PROCEDURE specifiek is voor SQL Server en SQL Server vereist geen puntkomma's om meerdere instructies in een CREATE PROCEDURE-instructie te scheiden.

  • Matrices van parameters Matrices van parameters kunnen worden gebruikt met een geparameteriseerde SQL-instructie als een effectieve manier om bulkbewerkingen uit te voeren. Matrices met parameters kunnen bijvoorbeeld worden gebruikt met de volgende INSERT-instructie om meerdere rijen in de tabel Regels in te voegen terwijl slechts één SQL-instructie wordt uitgevoerd:

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

    Als een gegevensbron geen matrices van parameters ondersteunt, kan het stuurprogramma deze emuleren door de SQL-instructie eenmaal uit te voeren voor elke set parameters. Zie Instructieparameters en matrices van parameterwaarden verderop in deze sectie voor meer informatie.

De verschillende soorten batches kunnen niet op een interoperabele manier worden gemengd. Dat wil gezegd, hoe een toepassing het resultaat bepaalt van het uitvoeren van een expliciete batch met procedureaanroepen, een expliciete batch die gebruikmaakt van matrices van parameters en een procedureaanroep die gebruikmaakt van matrices van parameters, is stuurprogrammaspecifiek.

Deze sectie bevat de volgende onderwerpen.