BEGIN CONVERSATION TIMER (Transact-SQL)

タイマを開始します。タイムアウトになると、Service Broker によって、メッセージ交換用のローカル キューに https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer の型のメッセージが配置されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

BEGIN CONVERSATION TIMER ( conversation_handle )
   TIMEOUT = timeout 
[ ; ]

引数

  • BEGIN CONVERSATION TIMER (conversation_handle)
    メッセージ交換を定刻に指定します。この conversation_handle は、uniqueidentifier であることが必要です。

  • TIMEOUT
    メッセージをキューに配置する前に待機する時間を、秒単位で指定します。

説明

メッセージ交換タイマによって、特定の時間が経過すると、メッセージ交換でメッセージを受信する方法がアプリケーションに提供されます。タイマが時間切れになる前にメッセージ交換で BEGIN CONVERSATION TIMER を呼び出すと、タイムアウトが新しい値に設定されます。メッセージ交換の有効期間とは異なり、メッセージ交換の送信側と受信側に個別のメッセージ交換タイマがあります。DialogTimer メッセージは、リモート側のメッセージ交換に影響することなくローカル キューに届きます。したがって、タイマ メッセージはアプリケーションでどのような目的にも使用できます。

たとえばメッセージ交換タイマを使用すると、アプリケーションで、期限の切れた応答に対する待機時間を短くすることができます。アプリケーションが 30 秒以内にダイアログを完了するようにする場合、そのダイアログのメッセージ交換タイマを 60 秒 (30 秒に 30 秒の猶予時間を加えたもの) に設定できます。ダイアログが 60 秒後もまだ開いている場合、アプリケーションはそのダイアログのキューでタイムアウト メッセージを受信します。

また、アプリケーションはメッセージ交換タイマを使用して、特定の時間にアクティブ化を要求できます。たとえば、数分ごとにアクティブな接続数を報告するサービス、またはオープンな予約発注数を毎晩報告するサービスを作成できます。このサービスでは、メッセージ交換タイマを希望する時間に終了するように設定します。タイマが終了すると、Service Broker によって DialogTimer メッセージが送信されます。DialogTimer メッセージにより、Service Broker でキュー用のアクティブ化ストアド プロシージャが開始します。このストアド プロシージャによって、メッセージがリモート サービスに送信され、メッセージ交換タイマが再開します。

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

権限

メッセージ交換タイマの設定権限は、既定では、メッセージ交換用サービスに対する SEND 権限を持つユーザー、sysadmin 固定サーバー ロールのメンバ、および db_owner 固定データベース ロールのメンバに与えられています。

次の例では、@dialog_handle で指定されるダイアログに 2 分間のタイムアウトを設定します。

-- @dialog_handle is of type uniqueidentifier and
-- contains a valid conversation handle.

BEGIN CONVERSATION TIMER (@dialog_handle)
TIMEOUT = 120 ;