查詢佇列

適用於:SQL ServerAzure SQL 受控執行個體

有時候有必要將佇列的內容做為一個整體來檢查。 您可能想知道佇列包含多少訊息,或者您可能想確定應用程式已處理您即將要使其離線之服務的所有訊息。 您可能需要了解為何訊息不由應用程式來處理。

若要取得此資訊,請使用佇列的名稱做為 SELECT 陳述式的來源資料表。 佇列上的 SELECT 陳述式與檢視或資料表上的 SELECT 陳述式具有相同的格式。

注意

Service Broker 是設計用來允許多個佇列讀取器有效地從佇列接收訊息。 不過,佇列上的 SELECT 陳述式可能會造成封鎖。 在佇列上使用 SELECT 陳述式時,請指定 NOLOCK 提示,以避免封鎖使用佇列的應用程式。如需佇列中資料行的描述,請參閱 CREATE QUEUE (Transact-SQL)

下列是 SELECT 陳述式的範例,可以從中得知 ExpenseQueue 佇列中的訊息數:

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

下列 SELECT 陳述式會讓系統管理員了解 ExpenseQueue 佇列是否包含服務 //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 會管理對佇列的更新。 雖然佇列的名稱可用於取代 SELECT 陳述式中資料表名稱,但是佇列不能為 INSERT、UPDATE、DELETE 或 TRUNCATE 陳述式的目標。 SQL Server 不允許使用者在佇列上建立索引。

另請參閱

SELECT (Transact-SQL)佇列

訊息保留期