BEGIN CONVERSATION TIMER (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
タイマーを開始します。 タイムアウトになると、Service Broker はメッセージ交換のローカル キューに型 https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer
のメッセージを入れます。
構文
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)