2010-01-17 160 views
0

我目前在插入更新触发器中调用存储过程异步时出现问题。为此我使用服务代理。SQL Server 2005 Asnyc存储过程

--message type 
CREATE MESSAGE TYPE [TheMessage] VALIDATION = NONE 

--contract 
CREATE CONTRACT [TheContract] ([TheMessage] SENT BY ANY); 

--queue 
CREATE QUEUE [TheQueue] WITH ACTIVATION 
(STATUS = ON, MAX_QUEUE_READERS = 1, 
PROCEDURE_NAME = TheStoreProcedure, 
EXECUTE AS OWNER); 

--service 
CREATE SERVICE [TheService] ON QUEUE [TheQueue] ([TheContract]); 

在触发器:

DECLARE @Handle UNIQUEIDENTIFIER; 

BEGIN DIALOG CONVERSATION @Handle 
FROM SERVICE [TheService] 
TO SERVICE 'TheService' 
ON CONTRACT [TheContract] 
WITH ENCRYPTION = OFF; 

SEND ON CONVERSATION @Handle 
MESSAGE TYPE [TheMessage](N'some data'); 

在存储过程:

DECLARE @Handle UNIQUEIDENTIFIER; 
DECLARE @MessageType SYSNAME; 

RECEIVE TOP (1) 
@Handle = conversation_handle, 
@MessageType = message_type_name 
FROM [TheQueue]; 

IF(@Handle IS NOT NULL) 

BEGIN 

-- some statements 

END 

此设置似乎并没有工作。触发器不会抛出任何错误,所以我假设消息已排队。但存储内的接收似乎不起作用。我的任何陈述都没有被执行。

回答

0

好的,感谢您的回答,我解决了它。

的问题是业务代理被禁用..

USE AdventureWorks 
GO 

ALTER DATABASE AdventureWorks SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
ALTER DATABASE AdventureWorks SET ENABLE_BROKER 
ALTER DATABASE AdventureWorks SET MULTI_USER 
GO 
2