【问题标题】:SQL Server 2005 Asnyc stored procedureSQL Server 2005 异步存储过程
【发布时间】:2010-01-24 00:56:12
【问题描述】:

我目前在从插入更新触发器中调用异步存储过程时遇到问题。为此,我正在使用服务代理。

--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

此设置似乎不起作用。触发器不会引发任何错误,因此我假设消息已排队。但是存储中的接收似乎不起作用。我的所有语句都没有被执行。

【问题讨论】:

    标签: sql sql-server tsql stored-procedures


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      好的,谢谢你的回答,我修好了。

      问题是服务代理被禁用..

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-12
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        • 2010-09-08
        相关资源
        最近更新 更多