これが私が思いついたものです(単一のコントラクト/キュー/サービスに固執することについてのRemusの答えを使用して)。
タイプに基づいて特定のメッセージ/コントラクト/キュー/サービス名を作成します。
create message [//MyPrefix/SomeTypeMessage]
create queue dbo.SomeTypeQueue
create service [//MyPrefix/SomeTypeService]
create contract [//MyPrefix/SomeTypeContract]
したがって、「SomeType」は、挿入されたデータのどこかにあるタイプです。呼び出しが会話を開始するトリガーが作成されると、タイプはさまざまなsysnameを連結するために使用されます。'myTypeDataField'で見つかったデータに基づいて、レコードはさまざまなキュー/プロシージャに送信されます。
declare @handle uniqueidentifier,
@service sysname,
@contract sysname,
@messageType sysname,
@myType varchar(50)
set @myType = (select myTypeDataField from inserted)
set @messageBody = (select * from inserted for xml auto)
set @service = N'//MyPrefix/' + @myType + 'Service'
set @contract = N'//MyPrefix/' + @myType + 'Contract'
set @messageType = N'//MyPrefix/' + @myType + 'Message'
begin tran
begin dialog conversation @handle
from service @service
to service @service, 'current database'
on contract @contract
with encryption = off;
send on conversation @handle
message type @messageType(@messageBody);
commit