Freigeben über


sys.dm_qn_subscriptions (Transact-SQL)

Gibt Informationen zu den aktiven Abfragebenachrichtigungsabonnements auf dem Server zurück. Diese Sicht können Sie verwenden, um in der Serverdatenbank oder in einer angegebenen Datenbank eine Überprüfung auf aktive Abonnements vorzunehmen oder um auf eine Überprüfung auf einen angegebenen Serverprinzipal vorzunehmen.

Spaltenname

Datentyp

Beschreibung

id

int

ID eines Abonnements.

database_id

int

ID der Datenbank, für die die Abfragebenachrichtigung ausgeführt wurde. In dieser Datenbank sind die mit diesem Abonnement verbundenen Informationen gespeichert.

sid

varbinary(85)

Sicherheits-ID des Serverprinzipals, der dieses Abonnement erstellt hat und besitzt.

object_id

int

ID der internen Tabelle, in der die Informationen zu Abonnementparametern gespeichert sind.

created

datetime

Datum und Uhrzeit der Erstellung des Abonnements.

timeout

int

Timeout für das Abonnement in Sekunden. Die Benachrichtigung wird ausgelöst, nachdem diese Zeit verstrichen ist.

HinweisHinweis
Die tatsächliche Zeit der Auslösung kann größer sein als das angegebene Timeout. Wenn jedoch eine Änderung, die das Abonnement ungültig macht, nach dem angegebenen Timeout und vor dem Auslösen des Abonnements auftritt, wird von SQL Server sichergestellt, dass das Auslösen zu dem Zeitpunkt erfolgt, an dem die Änderung vorgenommen wurde.

Status

int

Zeigt den Status des Abonnements an. Die Liste der Codes finden Sie in der Tabelle unter den Hinweisen.

Kardinalitäten der Beziehungen

Von

In

Für

Typ

sys.dm_qn_subscriptions

sys.databases

database_id

n:1

sys.dm_qn_subscriptions

sys.internal_tables

object_id

n:1

Hinweise

Der Statuscode 0 gibt einen nicht definierten Status an.

Die folgenden Statuscodes geben an, dass ein Abonnement aufgrund einer Änderung ausgelöst wurde:

Code

Untergeordneter Status

Info

65798

Abonnement wurde ausgelöst, da sich Daten geändert haben.

Abonnement wurde durch eine Einfügung ausgelöst.

65799

Abonnement wurde ausgelöst, da sich Daten geändert haben.

Löschen

65800

Abonnement wurde ausgelöst, da sich Daten geändert haben.

Aktualisieren

65801

Abonnement wurde ausgelöst, da sich Daten geändert haben.

Zusammenführen

65802

Abonnement wurde ausgelöst, da sich Daten geändert haben.

Tabelle kürzen

66048

Abonnement wurde ausgelöst, da das Timeout abgelaufen ist.

Nicht definierter Infomodus

66315

Abonnement wurde ausgelöst, da sich ein Objekt geändert hat.

Objekt oder Benutzer wurde gelöscht.

66316

Abonnement wurde ausgelöst, da sich ein Objekt geändert hat.

Objekt wurde geändert.

66565

Abonnement wurde ausgelöst, da eine Datenbank getrennt oder gelöscht wurde.

Server oder Datenbank wurde neu gestartet.

66571

Abonnement wurde ausgelöst, da eine Datenbank getrennt oder gelöscht wurde.

Objekt oder Benutzer wurde gelöscht.

66572

Abonnement wurde ausgelöst, da eine Datenbank getrennt oder gelöscht wurde.

Objekt wurde geändert.

67341

Abonnement wurde aufgrund von Ressourcenmangel auf dem Server ausgelöst.

Abonnement wurde aufgrund von Ressourcenmangel auf dem Server ausgelöst.

Die folgenden Statuscodes geben an, dass ein Abonnement nicht erstellt wurde:

Code

Untergeordneter Status

Info

132609

Abonnement konnte nicht erstellt werden, da die Anweisung nicht unterstützt wird.

Abfrage ist zu komplex.

132610

Abonnement konnte nicht erstellt werden, da die Anweisung nicht unterstützt wird.

Ungültige Anweisung für Abonnement.

132611

Abonnement konnte nicht erstellt werden, da die Anweisung nicht unterstützt wird.

Ungültige festgelegte Optionen für das Abonnement.

132612

Abonnement konnte nicht erstellt werden, da die Anweisung nicht unterstützt wird.

Ungültige Isolationsstufe

132622

Abonnement konnte nicht erstellt werden, da die Anweisung nicht unterstützt wird.

Wird intern verwendet.

132623

Abonnement konnte nicht erstellt werden, da die Anweisung nicht unterstützt wird.

Überschreitet den Vorlagengrenzwert pro Tabelle.

Die folgenden Statuscodes werden intern verwendet und als Check Kill- und Init-Modi klassifiziert:

Code

Untergeordneter Status

Info

198656

Intern verwendet: Check Kill- und Init-Modus

Nicht definierter Infomodus

198928

Abonnement wurde zerstört.

Abonnement wurde ausgelöst, da eine Datenbank angefügt wurde.

198929

Abonnement wurde zerstört.

Abonnement wurde ausgelöst, da ein Benutzer gelöscht wurde.

198930

Abonnement wurde zerstört.

Abonnement wurde aufgrund eines erneuten Abonnements gelöscht.

198931

Abonnement wurde zerstört.

Abonnement wurde abgebrochen.

199168

Abonnement ist aktiv.

Nicht definierter Infomodus

199424

Abonnement wurde initialisiert, ist aber noch nicht aktiv.

Nicht definierter Infomodus

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.

HinweisHinweis

Falls der Benutzer die VIEW SERVER STATE-Berechtigung nicht besitzt, gibt diese Sicht Informationen zu Abonnements zurück, die sich im Besitz des aktuellen Benutzers befinden.

Beispiele

A. Zurückgeben aktiver Abfragebenachrichtigungsabonnements für den aktuellen Benutzer

Im folgenden Beispiel werden die aktiven Abfragebenachrichtigungsabonnements des aktuellen Benutzers zurückgegeben. Wenn der Benutzer über VIEW SERVER STATE-Berechtigungen verfügt, werden alle aktiven Abonnements auf dem Server zurückgegeben.

SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions;
GO

B. Zurückgeben aktiver Abfragebenachrichtigungsabonnements für einen angegebenen Benutzer

Im folgenden Beispiel werden die aktiven Abfragebenachrichtigungsabonnements zurückgegeben, die vom Anmeldenamen Ruth0 abonniert wurden.

SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions
WHERE sid = SUSER_SID('Ruth0');
GO

C. Zurückgeben der Metadaten interner Tabellen für Abfragebenachrichtigungsabonnements

Im folgenden Beispiel werden die Metadaten interner Tabellen für Abfragebenachrichtigungsabonnements zurückgegeben.

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