取得伺服端資料指標中繼資料

有兩種方法可以取得描述伺服器資料指標的中繼資料:

  • 使用 API 伺服器資料指標搭配資料庫 API (例如 ADO、OLE DB 或 ODBC) 的應用程式,通常都會使用 API 的資料指標功能取得資料指標狀態的相關資訊。

  • Transact-SQL 指令碼、預存程序和觸發程序可使用本主題討論的 Transact-SQL 函數和系統預存程序,來取得 Transact-SQL 資料指標的相關資訊。

以下介紹數個系統函數,可支援伺服端資料指標,或指定至資料指標變數的伺服端資料指標。

  • CURSOR_STATUS

    顯示資料指標為開啟或關閉的狀態,或指出資料指標變數目前是否與資料指標關聯。

  • @@FETCH_STATUS

    顯示此次連線的最近擷取作業是成功或失敗。

  • @@CURSOR_ROWS

    報告於連線時最近一次開啟的資料指標中填入的資料列數目。

以下介紹數個系統預存程序,可報告各伺服端資料指標或指定給資料指標變數的伺服端資料指標具有何種特性:

  • sp_describe_cursor

    傳回一個資料指標,說明資料指標屬性,例如其範圍、名稱、類型、狀態和資料列數目。

  • sp_describe_cursor_columns

    傳回一個資料指標,說明資料指標中每一資料行的屬性,例如資料行名稱、位置、大小和資料類型。

    [!附註]

    在前一版的 SQL Server 中,只有在資料行明確包含在 FOR UPDATE 子句中時才會將資料行標示為可更新,但這實際上不會保證確實可更新資料行。在 SQL Server 中,只有當資料行確實可透過資料指標更新時,才會標示為可更新。

  • sp_describe_cursor_tables

    傳回一個資料指標,說明資料指標引用的基底資料表。

  • sp_cursor_list

    傳回一個資料指標,列出此連線目前所有可見的資料指標。由 sp_cursor_list 傳回的資料指標,其格式與 sp_describe_cursor 傳回的資料指標相同。

這些系統預存程序會將其結果集傳回為輸出資料指標變數。資料庫 API 不支援資料指標變數,因此無法從應用程式呼叫這些程序,只能從 Transact-SQL 指令碼、預存程序和批次呼叫。應用程式應該使用資料庫 API 的資料指標功能,來取得 API 伺服器資料指標的中繼資料。

請特別注意這些函數和預存程序傳回的狀態資訊,尤其是 @@FETCH_STATUS。每次為連接開啟的資料指標發出 FETCH 陳述式之後,會變更 @@FETCH_STATUS 傳回的資訊。在執行數個其他陳述式之後可能需要參考狀態資訊的預存程序或觸發程序,應該立即在 FETCH 陳述式之後將 @@FETCH_STATUS 儲存在整數變數中。即使在 FETCH 和測試狀態的陳述式之間的批次中沒有 FETCH 陳述式,還是可能重設 @@FETCH_STATUS。如果介於中間的 INSERT、UPDATE 或 DELETE 陳述式引發了觸發程序,則可以開啟觸發程序並從資料指標中提取。@@FETCH_STATUS 則會包含觸發程序中最後一個 FETCH 陳述式的狀態。

預存程序會報告特定資料指標的狀態資訊,使其狀態資訊不被其他資料指標作業所影響。但是這個狀態資訊仍受同一資料指標上的作業影響,所以使用預存程序傳回的狀態資訊時,仍不可粗心。