sys.dm_qn_subscriptions (Transact-SQL)
返回有关服务器中的活动查询通知订阅的信息。 可以使用此视图检查服务器或指定数据库中的活动订阅,或者检查指定服务器主体。
适用范围:SQL Server(SQL Server 2008 到当前版本)。 |
列名 |
数据类型 |
说明 |
---|---|---|
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