共用方式為


處理結果 (ODBC)

應用程式提交 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)