sys.dm_qn_subscriptions (Transact-SQL)

Restituisce informazioni sulle sottoscrizioni di notifica delle query attive nel server. È possibile utilizzare questa vista per individuare le sottoscrizioni attive nel server o in un database specificato oppure per individuare un'entità server specificata.

Nome colonna

Tipo di dati

Descrizione

id

int

ID di una sottoscrizione.

database_id

int

ID del database in cui la query di notifica viene eseguita. In questo database vengono archiviate le informazioni relative alla sottoscrizione.

sid

varbinary(85)

ID di sicurezza (SID) dell'entità server che ha creato la sottoscrizione e di cui è proprietaria.

object_id

int

ID della tabella interna in cui sono archiviate le informazioni sui parametri di sottoscrizione.

created

datetime

Data e ora di creazione della sottoscrizione.

timeout

int

Timeout in secondi per la sottoscrizione. La notifica verrà contrassegnata per l'esecuzione non appena è trascorso l'intervallo di tempo specificato.

NotaNota
È possibile che l'ora di esecuzione effettiva sia maggiore del timeout specificato. Se, tuttavia, si verifica una modifica che invalida la sottoscrizione dopo il timeout specificato ma prima dell'esecuzione della sottoscrizione, SQL Server fa sì che l'esecuzione si verifichi in corrispondenza dell'ora in cui viene apportata la modifica.

status

int

Indica lo stato della sottoscrizione. Per un elenco dei codici, vedere la tabella in Note.

Cardinalità delle relazioni

Da

A

In

Tipo

sys.dm_qn_subscriptions

sys.databases

database_id

Molti-a-uno

sys.dm_qn_subscriptions

sys.internal_tables

object_id

Molti-a-uno

Osservazioni

Il codice di stato 0 indica uno stato non definito.

I codici di stato seguenti indicano che è stata attivata una sottoscrizione a causa di una modifica:

Codice

Stato minore

Info

65798

La sottoscrizione è stata attivata perché i dati sono stati modificati

sottoscrizione attivata dall'inserimento

65799

La sottoscrizione è stata attivata perché i dati sono stati modificati

eliminazione

65800

La sottoscrizione è stata attivata perché i dati sono stati modificati

aggiornamento

65801

La sottoscrizione è stata attivata perché i dati sono stati modificati

unione

65802

La sottoscrizione è stata attivata perché i dati sono stati modificati

troncamento di tabella

66048

La sottoscrizione è stata attivata perché il timeout è scaduto

modalità informazioni non definita

66315

La sottoscrizione è stata attivata perché un oggetto è stato modificato

oggetto o utente eliminato

66316

La sottoscrizione è stata attivata perché un oggetto è stato modificato

oggetto modificato

66565

La sottoscrizione è stata attivata perché il database è stato scollegato o eliminato

server o db riavviato

66571

La sottoscrizione è stata attivata perché il database è stato scollegato o eliminato

oggetto o utente eliminato

66572

La sottoscrizione è stata attivata perché il database è stato scollegato o eliminato

oggetto modificato

67341

La sottoscrizione è stata attivata a causa di mancanza di risorse sul server

la sottoscrizione è stata attivata a causa di mancanza di risorse sul server

I codici di stato seguenti indicano che non è stato possibile creare una sottoscrizione:

Codice

Stato minore

Info

132609

La creazione della sottoscrizione non è riuscita perché l'istruzione non è supportata

query troppo complessa

132610

La creazione della sottoscrizione non è riuscita perché l'istruzione non è supportata

istruzione non valida per la sottoscrizione

132611

La creazione della sottoscrizione non è riuscita perché l'istruzione non è supportata

opzioni impostate non valide per la sottoscrizione

132612

La creazione della sottoscrizione non è riuscita perché l'istruzione non è supportata

livello di isolamento non valido

132622

La creazione della sottoscrizione non è riuscita perché l'istruzione non è supportata

utilizzato internamente

132623

La creazione della sottoscrizione non è riuscita perché l'istruzione non è supportata

superato il limite di modelli per tabella

I codici di stato seguenti vengono utilizzati internamente e vengono classificati come modalità di controllo di termine e inizializzazione:

Codice

Stato minore

Info

198656

Utilizzato internamente: modalità di controllo di termine e inizializzazione

modalità informazioni non definita

198928

La sottoscrizione è stata eliminata

la sottoscrizione è stata attivata perché è stato collegato il database

198929

La sottoscrizione è stata eliminata

la sottoscrizione è stata attivata perché l'utente è stato eliminato

198930

La sottoscrizione è stata eliminata

la sottoscrizione è stata eliminata a causa di una nuova sottoscrizione

198931

La sottoscrizione è stata eliminata

la sottoscrizione è stata terminata

199168

La sottoscrizione è attiva

modalità informazioni non definita

199424

La sottoscrizione è stata inizializzata ma non è ancora attiva

modalità informazioni non definita

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

Nota

Se l'utente non dispone dell'autorizzazione VIEW SERVER STATE, questa vista restituisce informazioni sulle sottoscrizioni di proprietà dell'utente corrente.

Esempi

A. Restituzione delle sottoscrizioni di notifica delle query attive per l'utente corrente

Nell'esempio seguente vengono restituite le sottoscrizioni di notifica delle query attive per l'utente corrente. Se l'utente dispone delle autorizzazioni VIEW SERVER STATE, vengono restituite tutte le sottoscrizioni attive nel server.

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

B. Restituzione delle sottoscrizioni di notifica delle query attive per un utente specificato

Nell'esempio seguente vengono restituite le sottoscrizioni di notifica delle query attive per l'account di accesso Ruth0.

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

C. Restituzione dei metadati delle tabelle interne per le sottoscrizioni di notifica delle query

Nell'esempio seguente vengono restituiti i metadati delle tabelle interne per le sottoscrizioni di notifica delle query.

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