BEGIN CONVERSATION TIMER (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

タイマーを開始します。 タイムアウトになると、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 ;  

参照

BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)