Partage via


Lots d’instructions SQL

Un lot d’instructions SQL est un groupe de deux instructions SQL ou plus ou une seule instruction SQL qui a le même effet qu’un groupe de deux instructions SQL ou plus. Dans certaines implémentations, l’instruction batch entière est exécutée avant la disponibilité des résultats. Cela est souvent plus efficace que l’envoi d’instructions séparément, car le trafic réseau peut souvent être réduit et la source de données peut parfois optimiser l’exécution d’un lot d’instructions SQL. Dans d’autres implémentations, l’appel de SQLMoreResults déclenche l’exécution de l’instruction suivante dans le lot. ODBC prend en charge les types de lots suivants :

  • Les lots explicites Un lot explicite est deux instructions SQL ou plus séparées par des points-virgules (;). Par exemple, le lot suivant d’instructions SQL ouvre une nouvelle commande. Cela nécessite l’insertion de lignes dans les tables Orders et Lines. Notez qu’il n’existe aucun point-virgule après la dernière instruction.

    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)  
    
  • Procédures Si une procédure contient plusieurs instructions SQL, il est considéré comme un lot d’instructions SQL. Par exemple, l’instruction sql Server suivante crée une procédure qui retourne un jeu de résultats contenant des informations sur un client et un jeu de résultats répertoriant toutes les commandes commerciales ouvertes pour ce client :

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

    L’instruction CREATE PROCEDURE elle-même n’est pas un lot d’instructions SQL. Toutefois, la procédure qu’elle crée est un lot d’instructions SQL. Aucun point-virgule ne sépare les deux instructions SELECT , car l’instruction CREATE PROCEDURE est spécifique à SQL Server et SQL Server ne nécessite pas de points-virgules pour séparer plusieurs instructions dans une instruction CREATE PROCEDURE .

  • Les tableaux de tableaux de paramètres de paramètres peuvent être utilisés avec une instruction SQL paramétrable comme moyen efficace d’effectuer des opérations en bloc. Par exemple, des tableaux de paramètres peuvent être utilisés avec l’instruction INSERT suivante pour insérer plusieurs lignes dans la table Lines lors de l’exécution d’une seule instruction SQL :

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

    Si une source de données ne prend pas en charge les tableaux de paramètres, le pilote peut les émuler en exécutant l’instruction SQL une fois pour chaque ensemble de paramètres. Pour plus d’informations, consultez Paramètres d’instruction et tableaux de valeurs de paramètres, plus loin dans cette section.

Les différents types de lots ne peuvent pas être mélangés de manière interopérable. Autrement dit, comment une application détermine le résultat de l’exécution d’un lot explicite qui inclut des appels de procédure, un lot explicite qui utilise des tableaux de paramètres et un appel de procédure qui utilise des tableaux de paramètres est spécifique au pilote.

Cette section contient les rubriques suivantes :