處理結果 (ODBC)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

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

GRANT 或 REVOKE 之類的 SQL 陳述式不會傳回結果集。 針對這些語句, 來自 SQLExecuteSQLExecDirect 的傳回碼通常是成功的唯一指示。

每個 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)