适用范围:SQL Server
返回有关服务器中的活动查询通知订阅的信息。 可以使用此视图检查服务器或指定数据库中的活动订阅,或者检查指定服务器主体。
| 列名称 | 数据类型 | 说明 |
|---|---|---|
| id | int | 订阅的 ID。 |
| database_id | int | 执行通知查询所在数据库的 ID。 该数据库存储该订阅的相关信息。 |
| sid | varbinary(85) | 创建并拥有该订阅的服务器主体的安全 ID。 |
| object_id | int | 存储有关订阅参数信息的内部表的 ID。 |
| created | datetime | 创建订阅的日期和时间。 |
| timeout | int | 订阅超时(以秒为单位)。 在经过这段时间后,通知将标记为激发。 注意:实际触发时间可能大于指定的超时时间。但是,如果使订阅失效的更改发生在指定的超时之后,但在触发订阅之前,SQL Server 可确保在发生更改时触发。 |
| status | int | 指示订阅的状态。 有关代码列表,请参阅备注下的表。 |
关系基数
| 源 | 操作 | 开 | 类型 |
|---|---|---|---|
| sys.dm_qn_subscriptions | sys.databases | database_id | 多对一 |
| sys.dm_qn_subscriptions | sys.internal_tables | object_id | 多对一 |
注解
状态代码为 0 指示未确定的状态。
下面的状态代码指示由于更改而激发了订阅:
| Code | 次要状态 | 信息 |
|---|---|---|
| 65798 | 因为更改数据而激发订阅 | 由插入触发的订阅 |
| 65799 | 因为更改数据而激发订阅 | 删除 |
| 65800 | 因为更改数据而激发订阅 | 更新 |
| 65801 | 因为更改数据而激发订阅 | 合并 |
| 65802 | 因为更改数据而激发订阅 | 截断表 |
| 66048 | 因为超时而激发订阅 | 未确定的信息模式 |
| 66315 | 因为更改对象而激发订阅 | 删除了对象或用户 |
| 66316 | 因为更改对象而激发订阅 | 修改了对象 |
| 66565 | 因为分离或删除了数据库而激发订阅 | 重新启动了服务器或数据库 |
| 66571 | 因为分离或删除了数据库而激发订阅 | 删除了对象或用户 |
| 66572 | 因为分离或删除了数据库而激发订阅 | 修改了对象 |
| 67341 | 由于服务器上缺少 od 资源而激发订阅 | 由于服务器上缺少 od 资源而激发订阅 |
下面的状态代码指示无法创建订阅:
| Code | 次要状态 | 信息 |
|---|---|---|
| 132609 | 因为不支持此语句而导致订阅创建失败 | 查询过于复杂 |
| 132610 | 因为不支持此语句而导致订阅创建失败 | 用于订阅的语句无效 |
| 132611 | 因为不支持此语句而导致订阅创建失败 | 用于订阅的设置选项无效 |
| 132612 | 因为不支持此语句而导致订阅创建失败 | 隔离级别无效 |
| 132622 | 因为不支持此语句而导致订阅创建失败 | 供内部使用 |
| 132623 | 因为不支持此语句而导致订阅创建失败 | 超出每个表的模板限制 |
下面的状态代码供内部使用,它们归类为检查终止和初始化模式:
| Code | 次要状态 | 信息 |
|---|---|---|
| 198656 | 供内部使用:检查终止和初始化模式 | 未确定的信息模式 |
| 198928 | 订阅已损坏 | 因为数据库分离而激发订阅 |
| 198929 | 订阅已损坏 | 因为删除了用户而激发订阅 |
| 198930 | 订阅已损坏 | 因为重新订阅而删除了订阅 |
| 198931 | 订阅已损坏 | 订阅已终止 |
| 199168 | 订阅处于活动状态。 | 未确定的信息模式 |
| 199424 | 该订阅已初始化,但尚未处于活动状态 | 未确定的信息模式 |
权限
需要 VIEW 服务器的SERVER STATE权限。
注意
如果用户没有 VIEW 服务器状态权限,该视图返回当前用户所拥有的订阅信息。
SQL Server 2022 及更高版本的权限
需要 VIEW 服务器上的 SERVER PERFORMANCE STATE 权限。
示例
A. 返回当前用户的活动查询通知订阅
以下示例返回当前用户的活动查询通知订阅。 如果用户拥有 VIEW 服务器状态权限,服务器中所有活跃订阅都会被返回。
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions;
GO
B. 返回指定用户的活动查询通知订阅
以下示例返回通过登录 Ruth0 进行的活动查询通知订阅。
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions
WHERE sid = SUSER_SID('Ruth0');
GO
°C 返回查询通知订阅的内部表元数据
以下示例返回查询通知订阅的内部表元数据。
SELECT qn.id AS query_subscription_id
,it.name AS internal_table_name
,it.object_id AS internal_table_id
FROM sys.internal_tables AS it
JOIN sys.dm_qn_subscriptions AS qn ON it.object_id = qn.object_id
WHERE it.internal_type_desc = 'QUERY_NOTIFICATION';
GO
另请参阅
动态管理视图和函数 (Transact-SQL)
查询通知相关的动态管理视图 (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)