多個結果

結果是指資料來源在執行敘述後回傳的結果。 ODBC 有兩種結果類型:結果集與列計數。 列數 是指因更新、刪除或插入語句而受影響的列數。 批次可以產生多個結果,其細節描述在Batches of SQL Statements中。

下表列出應用程式用來判斷資料來源是否會針對不同批次類型回傳多個結果的 SQLGetInfo 選項。 特別是,資料來源可以回傳整個批次語句的單一列數,或是批次中每個語句的個別列數。 若以參數陣列執行結果集生成語句,資料來源可對所有參數集合回傳單一結果集,或為每組參數回傳個別結果集。

批次類型 行數 結果集
顯式批次 SQL_BATCH_ROW_COUNT[a] --[b]
Procedure SQL_BATCH_ROW_COUNT[a](批次處理行計數) --[b]
參數陣列 SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] 批次中可能支援產生列計數的語句,但不支援回傳列計數。 SQLGetInfo 中的SQL_BATCH_SUPPORT選項指示是否允許在批次中使用列數產生的語句;SQL_BATCH_ROW_COUNTS 選項會顯示這些列數是否會回傳給應用程式。

[b] 當明確批次和程序包含多個結果集產生語句時,總是會回傳多個結果集。

備註

ODBC 1.0 引入的SQL_MULT_RESULT_SETS選項僅提供是否能回傳多個結果集的一般資訊。 特別地,若回傳SQL_BS_SELECT_EXPLICIT或 SQL_BS_SELECT_PROC 位元作為 SQL_BATCH_SUPPORT,或回傳 SQL_PAS_BATCH 作為 SQL_PARAM_ARRAYS_SELECT,則設定為「Y」。

要處理多個結果,應用程式會呼叫 SQLMoreResults。 此函式捨棄目前結果,並提供下一個結果。 當沒有其他結果時,它會返回SQL_NO_DATA。 例如,假設以下語句以批次形式執行:

SELECT * FROM Parts WHERE Price > 100.00;  
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00  

這些語句執行後,應用程式會從 SELECT 語句建立的結果集中擷取資料列。 當它取得資料列完成後,會呼叫 SQLMoreResults 來提供已重新定價的零件數量。 必要時, SQLMoreResults 會丟棄未擷取的列並關閉游標。 應用程式接著呼叫 SQLRowCount ,以判斷 UPDATE 語句重新定價了多少零件。

是否在結果尚未取得前執行整個批次語句,則依驅動程式而異。 在某些實作中,情況確實如此;在其他情況下,呼叫 SQLMoreResults 會觸發批次中下一個陳述式的執行。

如果批次中的某個語句失敗, SQLMoreResults 會回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO。 如果批次因敘述失敗而中止,或失敗敘述是批次中的最後一個敘述, SQLMoreResults 會回傳 SQL_ERROR。 如果當敘述失敗時批次未被中止,且失敗敘述不是批次中的最後一個陳述, SQLMoreResults 會回傳SQL_SUCCESS_WITH_INFO。 SQL_SUCCESS_WITH_INFO表示至少產生了一個結果集或計數,且該批次未被中止。