BEGIN CONVERSATION TIMER (Transact-SQL)

適用対象:SQL ServerAzure 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 、 システム管理者 の固定サーバーロールのメンバー、 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)