處理結果 (ODBC)
適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics Platform System (PDW)
應用程式提交 SQL 語句之後,SQL Server傳回任何產生的資料做為一或多個結果集。 結果集是一組符合查詢準則的資料列和資料行。 SELECT 陳述式、目錄函數以及某些預存程序會產生表格形式的結果集,供應用程式使用。 如果已執行的 SQL 陳述式是一個預存程序、包含多個命令的批次,或包含關鍵字的 SELECT 陳述式,則會有多個要處理的結果集。
ODBC 目錄函數也可以擷取資料。 例如, SQLColumns 會擷取資料來源中資料行的相關資料。 這些結果集可以包含零或多個資料列。
GRANT 或 REVOKE 之類的 SQL 陳述式不會傳回結果集。 針對這些語句, 來自 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 陳述式處理結果集,應用程式會:
決定結果集的特性。
將資料行繫結到程式變數。
擷取單一值、整個資料列的值,或多個資料列的值。
測試是否有其他結果集,如果有,回到決定新結果集的特性。
從資料來源擷取資料列,然後將其傳回應用程式的過程稱為提取。
本節內容
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應