分享方式:


處理結果 (ODBC)

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

在應用程式提交 SQL 語句之後,SQL Server 會以一或多個結果集傳回任何產生的數據。 結果集是一組符合查詢準則的數據列和數據行。 SELECT 語句、目錄函式和某些預存程式會產生一個結果集,以表格式形式提供給應用程式使用。 如果執行的 SQL 語句是預存程式、包含多個命令的批次,或包含關鍵詞的 SELECT 語句,將會有多個結果集要處理。

ODBC 目錄函式也可以擷取數據。 例如, SQLColumns 會擷取數據源中數據行的相關數據。 這些結果集可以包含零個或多個數據列。

其他 SQL 語句,例如 GRANT 或 REVOKE,不會傳回結果集。 針對這些語句,SQLExecute SQLExecDirect 的傳回碼通常是語句成功的唯一指示。

每個 INSERT、UPDATE 和 DELETE 語句都會傳回只包含修改所影響之數據列數目的結果集。 當應用程式呼叫 SQLRowCount 時,可以使用此計數。 ODBC 3.x 應用程式必須呼叫 SQLRowCount 來擷取結果集或 SQLMoreResults 來取消它。 當應用程式執行包含多個 INSERT、UPDATE 或 DELETE 語句的批次或預存程式時,必須使用 SQLRowCount 來處理每個修改語句的結果集,或使用 SQLMoreResults 取消。 在批次或預存程式中加入 SET NOCOUNT ON 語句,即可取消這些計數。

Transact-SQL 包含 SET NOCOUNT 語句。 在 上設定 NOCOUNT 選項時,SQL Server 不會傳回受 語句影響的數據列計數,而 SQLRowCount 會傳回 0。 SQL Server Native Client ODBC 驅動程式版本引進驅動程式特定的 SQLGetStmtAttr 選項,SQL_SOPT_SS_NOCOUNT_STATUS,以報告 NOCOUNT 選項是否開啟或關閉。 每當 SQLRowCount 傳回 0 時,應用程式應該測試SQL_SOPT_SS_NOCOUNT_STATUS。 如果傳回SQL_NC_ON,則來自 SQLRowCount 的 0 值只會指出 SQL Server 尚未傳回數據列計數。 如果傳回SQL_NC_OFF,表示 NOCOUNT 已關閉,且來自 SQLRowCount 的 0 值表示語句不會影響任何數據列。 當SQL_SOPT_SS_NOCOUNT_STATUS SQL_NC_OFF時,應用程式不應該顯示 SQLRowCount 的值。 大型批次或預存程式可能包含多個 SET NOCOUNT 語句,因此程式設計人員無法假設SQL_SOPT_SS_NOCOUNT_STATUS保持不變。 每次 SQLRowCount 傳回 0 時,都應該測試此選項。

其他數個 Transact-SQL 語句會在訊息中傳回其數據,而不是結果集。 當 SQL Server Native Client ODBC 驅動程式收到這些訊息時,它會傳回SQL_SUCCESS_WITH_INFO,讓應用程式知道有可用的資訊訊息。 然後,應用程式可以呼叫 SQLGetDiagRec 來擷取這些訊息。 以這種方式運作的 Transact-SQL 語句如下:

  • DBCC

  • SET SHOWPLAN (適用於舊版 SQL Server)

  • SET STATISTICS

  • PRINT

  • RAISERROR

SQL Server Native Client ODBC 驅動程式會在 11 或更新版本的 RAISERROR 上傳回SQL_ERROR。 如果 RAISERROR 的嚴重性為 19 或更高版本,也會卸除連線。

若要從 SQL 語句處理結果集,應用程式:

  • 決定結果集的特性。

  • 將數據行系結至程式變數。

  • 擷取單一值、整個值列或多個值數據列。

  • 測試以查看是否有更多結果集,如果是,則會回傳以判斷新結果集的特性。

從資料來源擷取資料列,然後將其傳回應用程式的過程稱為「擷取」。

本節內容

另請參閱

SQL Server Native Client (ODBC)
處理結果操作說明主題 (ODBC)