sys.dm_qn_subscriptions (Transact-SQL)
傳回有關伺服器之使用中查詢通知訂閱的資訊。 您可以使用這個檢視,檢查伺服器或指定資料庫中是否有使用中的訂閱,或檢查指定的伺服器主體。
資料行名稱 |
資料類型 |
說明 |
---|---|---|
id |
int |
訂閱的識別碼。 |
database_id |
int |
執行通知查詢的資料庫識別碼。 這個資料庫會儲存與這項訂閱有關的資訊。 |
sid |
varbinary(85) |
建立和擁有這項訂閱之伺服器主體的安全性識別碼。 |
object_id |
int |
儲存訂閱參數相關資訊的內部資料表識別碼。 |
created |
datetime |
建立訂閱的日期和時間。 |
timeout |
int |
訂閱的逾時 (以秒為單位)。 通知會標示為在過了這個時間之後引發。
|
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