分享方式:


sys.dm_exec_cursors (Transact-SQL)

適用於:SQL Server

傳回在各種資料庫中開啟之數據指標的相關信息。

語法

  
dm_exec_cursors (session_id | 0 )  

引數

session_id | 0
工作階段的識別碼。 如果 指定session_id ,此函式會傳回指定會話中數據指標的相關信息。

如果指定 0,則函式會傳回所有工作階段之所有資料指標的相關信息。

傳回的資料表

資料行名稱 資料類型 描述
session_id int 保存此數據指標之會話的標識碼。
cursor_id int 數據指針對象的標識碼。
name nvarchar(256) 使用者所定義之數據指標的名稱。
性能 nvarchar(256) 指定數據指標的屬性。 下列屬性的值會串連以形成此資料行的值:
宣告介面
數據指標類型
數據指標並行
數據指標範圍
數據指標巢狀層級

例如,此數據行中傳回的值可能是 “TSQL |動態 |開放式 |全球(0)」。。
sql_handle varbinary(64) 處理宣告數據指標之批次的文字。
statement_start_offset int 目前執行中批次或預存程式的字元數,目前執行語句會啟動。 可以與sql_handlestatement_end_offsetsys.dm_exec_sql_text動態管理函式搭配使用,以擷取要求的目前執行語句。
statement_end_offset int 目前執行的批次或預存程式的字元數,目前執行語句結束。 可以與sql_handlestatement_start_offsetsys.dm_exec_sql_text動態管理函式搭配使用,以擷取要求的目前執行語句。
plan_generation_num bigint 序號,可用來在重新編譯之後區分計劃實例。
creation_time datetime 建立此數據指標時的時間戳。
is_open bit 指定數據指標是否開啟。
is_async_population bit 指定背景線程是否仍在異步填入KEYSET或 STATIC資料指標。
is_close_on_commit bit 指定是否使用 CURSOR_CLOSE_ON_COMMIT 宣告數據指標。

1 = 交易結束時,數據指標將會關閉。
fetch_status int 傳回數據指標的最後一個擷取狀態。 這是最後傳回@@FETCH_STATUS值。
fetch_buffer_size int 傳回擷取緩衝區大小的相關信息。

1 = Transact-SQL 數據指標。 這可以設定為 API 數據指標的較高值。
fetch_buffer_start int 針對 FAST_FORWARD 和 DYNAMIC 數據指標,如果數據指標未開啟,或位於第一個數據列之前,則會傳回 0。 否則,它會傳回 -1。

如果是 STATIC 和 KEYSET 數據指標,如果數據指標未開啟,則會傳回 0,如果游標位於最後一個數據列之外,則會傳回 -1。

否則,它會傳回其位置的數據列編號。
ansi_position int 擷取緩衝區內的游標位置。
worker_time bigint 執行此數據指標的背景工作角色所花費的時間,以微秒為單位。
bigint 數據指標所執行的讀取數目。
bigint 數據指標所執行的寫入數目。
dormant_duration bigint 啟動此數據指標上最後一個查詢(開啟或擷取)之後的毫秒數。

權限

需要伺服器上的 VIEW SERVER STATE 許可權。

SQL Server 2022 和更新版本的權限

需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。

備註

下表提供數據指標宣告介面的相關信息,並包含屬性數據行的可能值。

屬性 說明
API 數據指標是使用其中一個數據存取 API 宣告的(ODBC、OLEDB)。
TSQL Cursor 是使用 Transact-SQL DECLARE CURSOR 語法來宣告。

下表提供數據指標類型的相關信息,並包含屬性數據行的可能值。

類型 描述
索引鍵集 數據指標已宣告為 Keyset。
動態 數據指標已宣告為 Dynamic。
快照式 Cursor 已宣告為 Snapshot 或 Static。
Fast_Forward Cursor 已宣告為Fast Forward。

下表提供數據指標並行的相關信息,並包含屬性數據行的可能值。

並行 描述
唯讀 數據指標已宣告為唯讀。
捲動鎖定 數據指標使用捲動鎖定。
開放式 數據指標使用開放式並行控制。

下表提供數據指標範圍的相關信息,並包含屬性數據行的可能值。

影響範圍 描述
區域 指定已建立資料指標的批次、預存程序或觸發程序,其資料指標的範圍為本機範圍。
全球 指定連接的資料指標範圍為全域。

範例

A. 偵測舊的數據指標

這個範例會傳回伺服器上開啟的數據指標資訊,長度超過指定時間 36 小時。

SELECT creation_time, cursor_id, name, c.session_id, login_name   
FROM sys.dm_exec_cursors(0) AS c   
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id   
WHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 36;  
GO  

另請參閱

動態管理檢視和函數 (Transact-SQL)
執行相關的動態管理檢視和函數 (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)