Esecuzione di query nelle code

Si applica a:SQL ServerIstanza gestita di SQL di Azure

A volte può essere necessario esaminare il contenuto complessivo di una coda. È possibile conoscere il numero di messaggi contenuti in coda oppure assicurarsi che l'applicazione abbia elaborato tutti i messaggi per un servizio che si sta per portare offline. Potrebbe essere necessario scoprire perché i messaggi non vengono elaborati da un'applicazione.

Per ottenere queste informazioni, usare il nome della coda come tabella di origine di un'istruzione SELECT. Un'istruzione SELECT in una coda ha lo stesso formato di un'istruzione SELECT in una finestra o in una tabella.

Nota

Service Broker è progettato per consentire a più agenti di lettura coda di ricevere in modo efficiente messaggi da una coda. Tuttavia, un'istruzione SELECT in una coda può causare un blocco. Quando si usa un'istruzione SELECT in una coda, specificare l'hint NOLOCK per evitare di bloccare le applicazioni che usano la coda. Per una descrizione delle colonne in una coda, vedere CREATE QUEUE (Transact-SQL).

Di seguito è riportato un esempio di istruzione SELECT che consente di individuare il numero di messaggi presenti nella coda ExpenseQueue:

    SELECT COUNT(*) FROM dbo.ExpenseQueue WITH (NOLOCK) ;

L'istruzione SELECT seguente consente all'amministratore di sapere se la coda ExpenseQueue contiene messaggi per il servizio //Adventure-Works.com/AccountsPayable/Expenses:

    IF EXISTS(SELECT * FROM dbo.ExpenseQueue WITH (NOLOCK) WHERE
              service_name = '//Adventure-Works.com/AccountsPayable/Expenses')
      PRINT 'The queue contains messages for ' +
            '//Adventure-Works.com/AccountsPayable/Expenses'
    ELSE
      PRINT 'The queue does not contain messages for ' +
            '//Adventure-Works.com/AccountsPayable/Expenses' ;

Service Broker gestisce gli aggiornamenti alle code. In un'istruzione SELECT il nome di una coda può essere usato al posto di un nome di tabella ma non è possibile usare una coda come destinazione di un'istruzione INSERT, UPDATE, DELETE o TRUNCATE. SQL Server non consente la creazione di indici delle code.

Vedi anche

SELECT (Transact-SQL)Code

Conservazione dei messaggi