fa1*_*n3r 3 sql-server-2008 sql-server service-broker
开始对话的标准格式是这样的:
Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE initiator_1
TO SERVICE 'target_1'
ON CONTRACT MyContract ;
Run Code Online (Sandbox Code Playgroud)
但是我想创建一个灵活的通用过程,它可以从多个启动器服务中的任何一个发送特定对话(假设我有 10 个使用相同存储过程的潜在启动器服务)。
Create Procedure SendJoinRequest (@initiatorServiceName varchar)
AS
Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE @initiatorServiceName
TO SERVICE 'target_1'
ON CONTRACT MyContract ;
Run Code Online (Sandbox Code Playgroud)
我想这行不通,因为服务的标识符在
FROM SERVICE @initiatorServiceName
Run Code Online (Sandbox Code Playgroud)
实际上不能是字符串,而必须是服务的实际名称...是否有一种简单的方法可以将其作为参数传递?或者我是否必须将所有这些嵌套在一个令人讨厌的串联字符串执行中?
@String = blahblah + blah blah + escapecharacters + blah
execute(@String)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
实际上它会起作用。大多数 SSB 动词都接受参数作为参数(当然,RECEIVE 的 queuename 除外)。参数类型为sysname
:
Create Procedure SendJoinRequest
@from sysname,
@to sysname,
@contract sysname,
@messageType sysname,
@body XML
AS
Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN TRANSACTION
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE @from
TO SERVICE @to
ON CONTRACT @contract
WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @dialog_handle MESSAGE TYPE @messageType (@body);
COMMIT
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1499 次 |
最近记录: |