GET CONVERSATION GROUP (Transact-SQL)

次に受信するメッセージのメッセージ交換グループの識別子を返すと共に、そのメッセージが含まれるメッセージ交換のメッセージ交換グループをロックします。メッセージ交換グループの識別子は、メッセージ自体を取得する前にメッセージ交換の状態情報を取得する場合に使用できます。

構文

[ WAITFOR ( ]
   GET CONVERSATION GROUP @conversation_group_id
      FROM <queue>
[ ) ] [ , TIMEOUT timeout ]
[ ; ]


<queue> ::=
{
    [ database_name . [ schema_name ] . | schema_name . ] queue_name
}

引数

  • WAITFOR
    現在メッセージが存在しない場合、GET CONVERSATION GROUP ステートメントは、キューにメッセージが到着するのを待機します。
  • @conversation_group_id
    GET CONVERSATION GROUP ステートメントによって返されるメッセージ交換グループ ID が格納される変数です。この変数のデータ型は uniqueidentifier になります。使用できるメッセージ交換グループがない場合、この変数は NULL に設定されます。
  • FROM
    メッセージ交換グループを取得するキューを指定します。
  • database_name
    メッセージ交換グループを取得するキューが含まれているデータベースの名前を指定します。database_name を指定しない場合、既定では現在のデータベースが使用されます。
  • schema_name
    メッセージ交換グループを取得するキューを所有するスキーマの名前を指定します。schema_name を指定しない場合、既定では現在のユーザーの既定のスキーマが使用されます。
  • queue_name
    メッセージ交換グループを取得するキューの名前を指定します。
  • TIMEOUT timeout
    Service Broker が、キューにメッセージが到着するのを待機する時間を指定します (ミリ秒単位)。この句は WAITFOR 句と共に使用する必要があります。WAITFOR 句を使用するステートメントにこの句が含まれないか、timeout が -1 の場合、待機時間は無制限になります。タイムアウトになると、GET CONVERSATION GROUP では @conversation_group_id 変数に NULL が設定されます。

解説

ms178624.note(ja-jp,SQL.90).gif重要 :
GET CONVERSATION GROUP ステートメントがバッチまたはストアド プロシージャの最初のステートメントではない場合は、前のステートメントの後に、Transact-SQL ステートメントのターミネータであるセミコロン (;) を指定する必要があります。

GET CONVERSATION GROUP ステートメントで指定したキューが使用できない場合、ステートメントは失敗し、Transact-SQL エラーが返されます。

このステートメントでは、次に使用できるメッセージ交換グループが返されます。このメッセージ交換グループは、ステートメントによって正常にロックされ、使用可能なメッセージを含んでいます。したがって、同じトランザクション内で GET CONVERSATION GROUP を続けて呼び出すと、複数のメッセージ交換グループがロックされる場合があります。使用できるメッセージ交換グループがない場合、このステートメントでは、メッセージ交換グループの識別子として NULL が返されます。

WAITFOR 句を指定した場合、ステートメントは指定のタイムアウト時間が経過するかメッセージ交換グループが使用できるようになるまで待機します。ステートメントの待機中にキューが削除された場合は、その時点でエラーが返されます。

GET CONVERSATION GROUP は、ユーザー定義の関数では無効です。

権限

メッセージ交換グループの識別子をキューから取得する場合、現在のユーザーは、そのキューに対する RECEIVE 権限を持っている必要があります。

A. 無制限に待機して、メッセージ交換グループを取得する

次の例では、@conversation_group_id にメッセージ交換グループの識別子を設定します。このメッセージ交換グループは、ExpenseQueue 上にあり、次に使用できるメッセージを含んでいます。このコマンドは、メッセージが使用できるようになるまで待機します。

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

WAITFOR (
 GET CONVERSATION GROUP @conversation_group_id
     FROM ExpenseQueue
) ;

B. 1 分間待機して、メッセージ交換グループを取得する

次の例では、@conversation_group_id にメッセージ交換グループの識別子を設定します。このメッセージ交換グループは、ExpenseQueue 上にあり、次に使用できるメッセージを含んでいます。使用できるメッセージが 1 分以内に取得できない場合、GET CONVERSATION GROUP では、@conversation_group_id の値が変更されずに返されます。

DECLARE @conversation_group_id UNIQUEIDENTIFIER

WAITFOR (
    GET CONVERSATION GROUP @conversation_group_id 
    FROM ExpenseQueue ),
TIMEOUT 60000 ;

C. 待機せず、メッセージ交換グループを取得する

次の例では、@conversation_group_id にメッセージ交換グループの識別子を設定します。このメッセージ交換グループは、ExpenseQueue 上にあり、次に使用できるメッセージを含んでいます。使用できるメッセージがない場合、GET CONVERSATION GROUP ステートメントでは、@conversation_group_id の値が変更されずにすぐに返されます。

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

GET CONVERSATION GROUP @conversation_group_id
FROM AdventureWorks.dbo.ExpenseQueue ;

参照

関連項目

BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)

その他の技術情報

メッセージ交換グループのロック

ヘルプおよび情報

SQL Server 2005 の参考資料の入手