Condividi tramite


Batch di istruzioni SQL

Un batch di istruzioni SQL è un gruppo di due o più istruzioni SQL, oppure una singola istruzione SQL che ha lo stesso effetto di un gruppo di due o più istruzioni SQL. In alcune implementazioni, l'intera istruzione batch viene eseguita prima che siano disponibili dei risultati. Questa operazione è spesso più efficiente rispetto all'invio di istruzioni separatamente, perché il traffico di rete spesso può essere ridotto e l'origine dati può talvolta ottimizzare l'esecuzione di un batch di istruzioni SQL. In altre implementazioni, la chiamata a SQLMoreResults attiva l'esecuzione dell'istruzione successiva nel batch. ODBC supporta i tipi di batch seguenti:

  • Batch espliciti Un batch esplicito è costituito da due o più istruzioni SQL separate da punti e virgola (;). Per esempio, il batch di istruzioni SQL seguente apre un nuovo ordine cliente. Ciò richiede l'inserimento di righe nelle tabelle Orders e Lines. Si noti che non è presente alcun punto e virgola dopo l'ultima istruzione.

    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)  
    
  • Procedure Se una procedura contiene più istruzioni SQL, viene considerata un batch di istruzioni SQL. Ad esempio, l'istruzione specifica di SQL Server seguente crea una procedura che restituisce un set di risultati contenente informazioni su un cliente, e un set di risultati che elenca tutti gli ordini aperti per quel cliente:

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

    L'istruzione CREATE PROCEDURE stessa non è un batch di istruzioni SQL. Tuttavia, la procedura creata è un batch di istruzioni SQL. Nessun punto e virgola separa le due istruzioni SELECT perché l'istruzione CREATE PROCEDURE è specifica di SQL Server e SQL Server non richiede punti e virgola per separare più istruzioni in un'istruzione CREATE PROCEDURE.

  • Matrici di parametri Le matrici di parametri possono essere usate con un'istruzione SQL parametrizzata come modo efficace per eseguire operazioni bulk. Ad esempio, le matrici di parametri possono essere usate con l'istruzione INSERT seguente per inserire più righe nella tabella Lines durante l'esecuzione di una sola istruzione SQL:

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

    Se un'origine dati non supporta matrici di parametri, il driver può emularle eseguendo l'istruzione SQL una volta per ogni set di parametri. Per ulteriori informazioni, vedere Parametri d’istruzione e Matrici di valori di parametro, più avanti in questa sezione.

I diversi tipi di batch non possono essere misti in modo interoperabile. Ovvero il modo in cui un'applicazione determina il risultato dell'esecuzione di un batch esplicito che include chiamate di procedura, un batch esplicito che usa matrici di parametri e una chiamata di procedura che usa matrici di parametri sono specifici del driver.

Questa sezione descrive gli argomenti seguenti: