Batches von SQL-Anweisungen

Ein Batch von SQL-Anweisungen ist eine Gruppe von zwei oder mehr SQL-Anweisungen oder eine einzelne SQL-Anweisung, die denselben Effekt wie eine Gruppe von zwei oder mehr SQL-Anweisungen hat. In einigen Implementierungen wird die gesamte Batch-Anweisung ausgeführt, bevor ergebnisse verfügbar sind. Dies ist oft effizienter als das separate Übermitteln von Anweisungen, da der Netzwerkdatenverkehr häufig reduziert werden kann und die Datenquelle manchmal die Ausführung einer Reihe von SQL-Anweisungen optimieren kann. In anderen Implementierungen löst das Aufrufen von SQLMoreResults die Ausführung der nächsten Anweisung im Batch aus. ODBC unterstützt die folgenden Batchtypen:

  • Explizite Batches Ein expliziter Batch ist zwei oder mehr SQL-Anweisungen, die durch Semikolons getrennt sind (;)). Der folgende Batch von SQL-Anweisungen öffnet z. B. einen neuen Verkaufsauftrag. Dazu müssen Zeilen in die Tabellen "Bestellungen" und "Zeilen" eingefügt werden. Beachten Sie, dass nach der letzten Anweisung kein Semikolon vorhanden ist.

    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)  
    
  • Prozeduren Wenn eine Prozedur mehr als eine SQL-Anweisung enthält, wird sie als Batch von SQL-Anweisungen betrachtet. Mit der folgenden SQL Server-spezifischen Anweisung wird beispielsweise eine Prozedur erstellt, die ein Resultset zurückgibt, das Informationen zu einem Kunden enthält, und ein Resultset, das alle offenen Verkaufsaufträge für diesen Kunden auflistet:

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

    Die CREATE PROCEDURE-Anweisung selbst ist kein Batch von SQL-Anweisungen. Die von ihr erstellten Prozedur ist jedoch eine Reihe von SQL-Anweisungen. Keine Semikolons trennen die beiden SELECT-Anweisungen , da die CREATE PROCEDURE-Anweisung für SQL Server spezifisch ist, und SQL Server erfordert keine Semikolons, um mehrere Anweisungen in einer CREATE PROCEDURE-Anweisung zu trennen.

  • Arrays von Parameterarrays von Parametern können mit einer parametrisierten SQL-Anweisung als effektive Möglichkeit zum Ausführen von Massenvorgängen verwendet werden. Beispielsweise können Arrays von Parametern mit der folgenden INSERT-Anweisung verwendet werden, um mehrere Zeilen in die Zeilentabelle einzufügen, während nur eine einzelne SQL-Anweisung ausgeführt wird:

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

    Wenn eine Datenquelle Arrays von Parametern nicht unterstützt, kann der Treiber sie emulieren, indem die SQL-Anweisung für jede Gruppe von Parametern einmal ausgeführt wird. Weitere Informationen finden Sie unter "Anweisungsparameter " und "Arrays von Parameterwerten" weiter unten in diesem Abschnitt.

Die verschiedenen Arten von Batches können nicht interoperabel gemischt werden. Das heißt, wie eine Anwendung das Ergebnis der Ausführung eines expliziten Batches bestimmt, der Prozeduraufrufe, einen expliziten Batch, der Arrays von Parametern verwendet, und ein Prozeduraufruf, der Arrays von Parametern verwendet, ist treiberspezifisch.

In diesem Abschnitt werden die folgenden Themen behandelt: