SQL ステートメントのバッチBatches of SQL Statements

SQL ステートメントのバッチは、2つ以上の sql ステートメントのグループ、または2つ以上の SQL ステートメントのグループと同じ効果を持つ1つの SQL ステートメントです。A batch of SQL statements is a group of two or more SQL statements or a single SQL statement that has the same effect as a group of two or more SQL statements. 一部の実装では、結果が使用可能になる前にバッチステートメント全体が実行されます。In some implementations, the entire batch statement is executed before any results are available. 多くの場合、ネットワークトラフィックが減少し、データソースによって SQL ステートメントのバッチの実行が最適化される可能性があるため、ステートメントを個別に送信するよりも効率的です。This is often more efficient than submitting statements separately, because network traffic can often be reduced and the data source can sometimes optimize execution of a batch of SQL statements. その他の実装では、 Sqlmoreresults を呼び出すと、バッチ内の次のステートメントの実行がトリガーされます。In other implementations, calling SQLMoreResults triggers the execution of the next statement in the batch. ODBC では、次の種類のバッチがサポートされています。ODBC supports the following types of batches:

  • *明示的なバッチ***明示的なバッチは、セミコロン (;) で区切られた2つ以上の SQL ステートメントです。Explicit Batches An explicit batch is two or more SQL statements separated by semicolons (;). たとえば、次の SQL ステートメントのバッチでは、新しい販売注文が開きます。For example, the following batch of SQL statements opens a new sales order. これには、Orders テーブルと Lines テーブルの両方に行を挿入する必要があります。This requires inserting rows into both the Orders and Lines tables. 最後のステートメントの後にセミコロンがないことに注意してください。Note that there is no semicolon after the last statement.

    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)  
  • プロシージャ プロシージャに複数の SQL ステートメントが含まれている場合は、SQL ステートメントのバッチと見なされます。Procedures If a procedure contains more than one SQL statement, it is considered to be a batch of SQL statements. たとえば、次の SQL Server 固有のステートメントでは、顧客に関する情報を含む結果セットを返すプロシージャが作成され、その顧客のすべての開いている販売注文が一覧表示されます。For example, the following SQL Server-specific statement creates a procedure that returns a result set containing information about a customer and a result set listing all the open sales orders for that customer:

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

    CREATE PROCEDUREステートメント自体は、SQL ステートメントのバッチではありません。The CREATE PROCEDURE statement itself is not a batch of SQL statements. ただし、作成されるプロシージャは、SQL ステートメントのバッチです。However, the procedure it creates is a batch of SQL statements. CREATE procedureステートメントは SQL Server に固有であり、SQL Server では、 create procedureステートメントで複数のステートメントを区切るためにセミコロンを必要としないため、2つのSELECTステートメントはセミコロンで区切りません。No semicolons separate the two SELECT statements because the CREATE PROCEDURE statement is specific to SQL Server, and SQL Server does not require semicolons to separate multiple statements in a CREATE PROCEDURE statement.

  • パラメーターの配列 パラメーターの配列は、一括操作を実行する効果的な方法として、パラメーター化された SQL ステートメントで使用できます。Arrays of Parameters Arrays of parameters can be used with a parameterized SQL statement as an effective way to perform bulk operations. たとえば、次の insert ステートメントでパラメーターの配列を使用すると、1つの SQL ステートメントのみを実行しながら、複数の行を行テーブルに挿入できます。For example, arrays of parameters can be used with the following INSERT statement to insert multiple rows into the Lines table while executing only a single SQL statement:

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

    データソースがパラメーターの配列をサポートしていない場合、ドライバーは、パラメーターの各セットに対して SQL ステートメントを1回実行することで、それらをエミュレートできます。If a data source does not support arrays of parameters, the driver can emulate them by executing the SQL statement once for each set of parameters. 詳細については、このセクションで後述する「 ステートメントパラメーターパラメーター値の配列」を参照してください。For more information, see Statement Parameters and Arrays of Parameter Values, later in this section.

さまざまな種類のバッチを相互運用可能な方法で混在させることはできません。The different types of batches cannot be mixed in an interoperable manner. つまり、プロシージャ呼び出し、パラメーターの配列を使用する明示的なバッチ、およびパラメーターの配列を使用するプロシージャコールを含む明示的なバッチの実行結果をアプリケーションが決定する方法は、ドライバーによって異なります。That is, how an application determines the result of executing an explicit batch that includes procedure calls, an explicit batch that uses arrays of parameters, and a procedure call that uses arrays of parameters is driver-specific.

このセクションでは、次のトピックを扱います。This section contains the following topics.