sys.dm_qn_subscriptions (Transact-SQL)

返回有关服务器中的活动查询通知订阅的信息。 可以使用此视图检查服务器或指定数据库中的活动订阅,或者检查指定服务器主体。

列名

数据类型

说明

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 指示未确定的状态。

下面的状态代码指示由于更改而激发了订阅:

代码

次要状态

信息

65798

因为更改数据而激发订阅

由插入触发的订阅

65799

因为更改数据而激发订阅

删除

65800

因为更改数据而激发订阅

更新

65801

因为更改数据而激发订阅

合并

65802

因为更改数据而激发订阅

截断表

66048

因为超时而激发订阅

未确定的信息模式

66315

因为更改对象而激发订阅

删除了对象或用户

66316

因为更改对象而激发订阅

修改了对象

66565

因为分离或删除了数据库而激发订阅

重新启动了服务器或数据库

66571

因为分离或删除了数据库而激发订阅

删除了对象或用户

66572

因为分离或删除了数据库而激发订阅

修改了对象

67341

由于服务器上缺少 od 资源而激发订阅

由于服务器上缺少 od 资源而激发订阅

下面的状态代码指示无法创建订阅:

代码

次要状态

信息

132609

因为不支持此语句而导致订阅创建失败

查询过于复杂

132610

因为不支持此语句而导致订阅创建失败

用于订阅的语句无效

132611

因为不支持此语句而导致订阅创建失败

用于订阅的设置选项无效

132612

因为不支持此语句而导致订阅创建失败

隔离级别无效

132622

因为不支持此语句而导致订阅创建失败

供内部使用

132623

因为不支持此语句而导致订阅创建失败

超出每个表的模板限制

下面的状态代码供内部使用,它们归类为检查终止和初始化模式:

代码

次要状态

信息

198656

供内部使用:检查终止和初始化模式

未确定的信息模式

198928

订阅已损坏

因为数据库分离而激发订阅

198929

订阅已损坏

因为删除了用户而激发订阅

198930

订阅已损坏

因为重新订阅而删除了订阅

198931

订阅已损坏

订阅已终止

199168

订阅处于活动状态。

未确定的信息模式

199424

该订阅已初始化,但尚未处于活动状态

未确定的信息模式

权限

需要对服务器拥有 VIEW SERVER STATE 权限。

注意注意

如果用户不具备 VIEW SERVER STATE 权限,该视图将返回当前用户所拥有的订阅的有关信息。

示例

A.返回当前用户的活动查询通知订阅

以下示例返回当前用户的活动查询通知订阅。 如果用户拥有 VIEW SERVER STATE 权限,则将返回服务器中的所有活动订阅。

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)