【发布时间】:2011-11-23 22:42:10
【问题描述】:
在我的应用程序中,我需要异步调用存储过程。 为此,我正在使用 Sql Service Broker。 这些是创建异步调用所涉及的步骤。
1) 我创建了消息、合同、队列、服务。 并发送消息。我可以在“ReceiveQueue1”中看到我的消息。
2) 我创建了一个存储过程和一个队列 当我执行 Stored Proc(proc_AddRecord) 时,它只执行一次。 它读取队列中的所有记录并将这些记录添加到表中。 到目前为止,它的工作正常。 但是当我向“ReceiveQueue1”添加一些新消息时,我的存储过程没有添加那些 自动记录到表中。我必须重新执行存储过程(proc_AddRecord) 为了添加新消息。为什么存储过程没有被执行。 为了异步调用存储过程,我应该做什么。 使用 Service Broker 的全部意义在于异步调用存储过程。 我对 SQL Server Service Broker 完全陌生。 感谢任何帮助。 这是我的存储过程代码
#--exec proc_AddRecord
ALTER PROCEDURE proc_AddRecord
AS
Declare
@Conversation UniqueIdentifier,
@msgTypeName nvarchar(200),
@msg varbinary(max)
While (1=1)
Begin
Begin Transaction;
WAITFOR
(
Receive Top (1)
@Conversation = conversation_handle,
@msgTypeName = message_type_name,
@msg = message_body
from dbo.ReceiveQueue1
), TIMEOUT 5000
IF @@Rowcount = 0
Begin
Rollback Transaction
Break
End
PRINT @msg
If @msg = 'Sales'
BEGIN
insert into TableCity(deptNo,Manager,Group,EmpCount) VALUES(101,'Reeves',51, 29)
COMMIT Transaction
Continue
End
If @msg = 'HR'
BEGIN
insert into TableCity(deptNo,Manager,Group,EmpCount) VALUES(102,'Cussac',55, 14)
COMMIT Transaction
Continue
End
Begin
Print 'Process end of dialog messages here.'
End Conversation @Conversation
Commit Transaction
Continue
End
Rollback Transaction
END
ALTER QUEUE AddRecorQueue
WITH ACTIVATION (
PROCEDURE_NAME=proc_AddRecord,
MAX_QUEUE_READERS = 1,
STATUS = ON,
EXECUTE AS 'dbo');
【问题讨论】:
标签: sql-server-2005 asynchronous service-broker