执行批处理

在应用程序执行一批语句之前,应先检查它们是否受支持。 为执行此操作,应用程序使用 SQL_BATCH_SUPPORT、SQL_PARAM_ARRAY_ROW_COUNTS 和 SQL_PARAM_ARRAY_SELECTS 选项调用 SQLGetInfo。 第一个选项返回显式批处理和过程是否支持行计数生成语句和结果集生成语句,而后两个选项则返回有关参数化执行中行计数和结果集可用性的信息。

通过 SQLExecuteSQLExecDirect 执行语句批处理。 例如,以下调用执行显式语句批处理以开立新的销售订单。

SQLCHAR *BatchStmt =  
   "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)";  
  
SQLExecDirect(hstmt, BatchStmt, SQL_NTS);  

执行一批结果生成语句时,它将返回一个或多个行计数或结果集。 有关如何检索这些结果的信息,请参阅多个结果

如果一批语句包含参数标记,则这些语句按递增参数顺序进行编号,因为它们位于任何其他语句中。 例如,以下批次语句的参数编号为 1 到 21;第一个 INSERT 语句中的那些编号为 1 到 5,最后一个 INSERT 语句中的编号为 18 到 21。

INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)  
   VALUES (?, ?, ?, ?, ?);  
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);  
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);  
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);  
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);  

有关参数的详细信息,请参阅本部分后面的语句参数