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_handle statement_end_offset sys.dm_exec_sql_text 動態管理函式搭配 使用,以擷取要求的目前執行語句。
statement_end_offset int 目前執行的批次或預存程式的字元數,目前執行語句結束。 可以與sql_handle statement_start_offset sys.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。
Snapshot Cursor 已宣告為 Snapshot 或 Static。
Fast_Forward Cursor 已宣告為 Fast Forward。

下表提供資料指標並行的相關資訊,並包含屬性資料行的可能值。

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

下表提供資料指標範圍的相關資訊,並包含屬性資料行的可能值。

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

範例

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)