次の方法で共有


クエリ キュー

適用対象:SQL ServerAzure SQL Managed Instance

キュー全体の内容を調べる必要がある場合があります。 キューに含まれるメッセージの数を知りたい場合や、オフラインにするサービスのすべてのメッセージがアプリケーションで処理されていることを確認したい場合があります。 メッセージがアプリケーションによって処理されていない理由を調べる必要がある場合があります。

この情報を取得するには、キューの名前を SELECT ステートメントのソース テーブルとして使用します。 キューの SELECT ステートメントの形式は、ビューまたはテーブルの SELECT ステートメントと同じです。

注意

Service Broker は、複数のキュー リーダーでキューから効率的にメッセージを受け取るように設計されています。 ただし、キューの SELECT ステートメントによってブロックが発生する可能性があります。 キューで SELECT ステートメントを使用する場合は、キューを使用するアプリケーションがブロックされないように、 NOLOCK ヒントを指定します。 キュー内の列の説明については、 CREATE QUEUE を参照してください。

キュー SELECT 内のメッセージの数を調べるステートメント例を次に示します。

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 ステートメント内のテーブル名の代わりに使用できますが、キューを INSERTUPDATEDELETE、または TRUNCATE ステートメントのターゲットにすることはできません。 SQL Server では、ユーザーがキューにインデックスを作成することはできません。