--- title: "sys.dm_exec_cursors (Transact-SQL) | Microsoft Docs" ms.custom: "" ms.date: "08/09/2016" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" ms.technology: - "database-engine" ms.tgt_pltfrm: "" ms.topic: "language-reference" f1_keywords: - "sys.dm_exec_cursors_TSQL" - "dm_exec_cursors" - "dm_exec_cursors_TSQL" - "sys.dm_exec_cursors" dev_langs: - "TSQL" helpviewer_keywords: - "sys.dm_exec_cursors dynamic management function" ms.assetid: f520b63c-36af-40f1-bf71-6901d6331d3d caps.latest.revision: 23 author: "JennieHubbard" ms.author: "jhubbard" manager: "jhubbard" --- # sys.dm_exec_cursors (Transact-SQL) [!INCLUDE[tsql-appliesto-ss2008-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2008-xxxx-xxxx-xxx-md.md)] Returns information about the cursors that are open in various databases. ## Syntax ``` dm_exec_cursors (session_id | 0 ) ``` ## Arguments *session_id* | 0 ID of the session. If *session_id* is specified, this function returns information about cursors in the specified session. If 0 is specified, the function returns information about all cursors for all sessions. ## Table Returned |Column name|Data type|Description| |-----------------|---------------|-----------------| |**session_id**|**int**|ID of the session that holds this cursor.| |**cursor_id**|**int**|ID of the cursor object.| |**name**|**nvarchar(256)**|Name of the cursor as defined by the user.| |**properties**|**nvarchar(256)**|Specifies the properties of the cursor. The values of the following properties are concatenated to form the value of this column:
Declaration Interface
Cursor Type
Cursor Concurrency
Cursor scope
Cursor nesting level

For example, the value returned in this column might be "TSQL | Dynamic | Optimistic | Global (0)".| |**sql_handle**|**varbinary(64)**|Handle to the text of the batch that declared the cursor.| |**statement_start_offset**|**int**|Number of characters into the currently executing batch or stored procedure at which the currently executing statement starts. Can be used together with the **sql_handle**, the **statement_end_offset**, and the [sys.dm_exec_sql_text](../../relational-databases/system-dynamic-management-views/sys-dm-exec-sql-text-transact-sql.md) dynamic management function to retrieve the currently executing statement for the request.| |**statement_end_offset**|**int**|Number of characters into the currently executing batch or stored procedure at which the currently executing statement ends. Can be used together with the **sql_handle**, the **statement_start_offset**, and the **sys.dm_exec_sql_text** dynamic management function to retrieve the currently executing statement for the request.| |**plan_generation_num**|**bigint**|A sequence number that can be used to distinguish between instances of plans after recompilation.| |**creation_time**|**datetime**|Timestamp when this cursor was created.| |**is_open**|**bit**|Specifies whether the cursor is open.| |**is_async_population**|**bit**|Specifies whether the background thread is still asynchronously populating a KEYSET or STATIC cursor.| |**is_close_on_commit**|**bit**|Specifies whether the cursor was declared by using CURSOR_CLOSE_ON_COMMIT.

1 = Cursor will be closed when the transaction ends.| |**fetch_status**|**int**|Returns last fetch status of the cursor. This is the last returned @@FETCH_STATUS value.| |**fetch_buffer_size**|**int**|Returns information about the size of the fetch buffer.

1 = Transact-SQL cursors. This can be set to a higher value for API cursors.| |**fetch_buffer_start**|**int**|For FAST_FORWARD and DYNAMIC cursors, it returns 0 if the cursor is not open or if it is positioned before the first row. Otherwise, it returns -1.

For STATIC and KEYSET cursors, it returns 0 if the cursor is not open, and -1 if the cursor is positioned beyond the last row.

Otherwise, it returns the row number in which it is positioned.| |**ansi_position**|**int**|Cursor position within the fetch buffer.| |**worker_time**|**bigint**|Time spent, in microseconds, by the workers executing this cursor.| |**reads**|**bigint**|Number of reads performed by the cursor.| |**writes**|**bigint**|Number of writes performed by the cursor.| |**dormant_duration**|**bigint**|Milliseconds since the last query (open or fetch) on this cursor was started.| ## Permissions Requires VIEW SERVER STATE permission on the server. ## Remarks The following table provides information about the cursor declaration interface and includes the possible values for the properties column. |Property|Description| |--------------|-----------------| |API|Cursor was declared by using one of the data access APIs (ODBC, OLEDB).| |TSQL|Cursor was declared by using the Transact-SQL DECLARE CURSOR syntax.| The following table provides information about the cursor type and includes the possible values for the properties column. |Type|Description| |----------|-----------------| |Keyset|Cursor was declared as Keyset.| |Dynamic|Cursor was declared as Dynamic.| |Snapshot|Cursor was declared as Snapshot or Static.| |Fast_Forward|Cursor was declared as Fast Forward.| The following table provides information about cursor concurrency and includes the possible values for the properties column. |Concurrency|Description| |-----------------|-----------------| |Read Only|Cursor was declared as read-only.| |Scroll Locks|Cursor uses scroll locks.| |Optimistic|Cursor uses optimistic concurrency control.| The following table provides information about cursor scope and includes the possible values for the properties column. |Scope|Description| |-----------|-----------------| |Local|Specifies that the scope of the cursor is local to the batch, stored procedure, or trigger in which the cursor was created.| |Global|Specifies that the scope of the cursor is global to the connection.| ## Examples ### A. Detecting old cursors This example returns information about cursors that have been open on the server longer than the specified time of 36 hours. ``` 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 ``` ## See Also [Dynamic Management Views and Functions (Transact-SQL)](~/relational-databases/system-dynamic-management-views/system-dynamic-management-views.md) [Execution Related Dynamic Management Views and Functions (Transact-SQL)](../../relational-databases/system-dynamic-management-views/execution-related-dynamic-management-views-and-functions-transact-sql.md) [sys.dm_exec_sessions (Transact-SQL)](../../relational-databases/system-dynamic-management-views/sys-dm-exec-sessions-transact-sql.md)