SQL Server 2019
我正在尝试从触发器启动存储过程(以便触发器保持精简)来处理某些生产设施中的数据。使用队列/消息等对我来说是新的
我创建了一个队列和服务:
CREATE QUEUE [dbo].[StoredProcedureQueue]
CREATE SERVICE [StoredProcedureService] ON QUEUE [dbo].[StoredProcedureQueue];
ALTER QUEUE dbo.StoredProcedureQueue
WITH ACTIVATION (
PROCEDURE_NAME = dbo.ActivationProcedure,
MAX_QUEUE_READERS = 1,
EXECUTE AS OWNER)
激活过程很简单(只是暂时,稍后会触发不同带参数的存储过程)
CREATE or ALTER PROCEDURE dbo.ActivationProcedure
AS
BEGIN
print 'test'
INSERT INTO tbl_Log (LogType, LogText) values ('test', 'ActivationProcedure')
END
但是还没开始
表触发器会执行类似的操作(但我手动启动):
--------------------
DECLARE @message_body XML;
DECLARE @dlg UNIQUEIDENTIFIER;
-- Construct the XML message body
SET @message_body = '
<Message>
<barcode>PS23060094/9.9</barcode>
<palletweight>993</palletweight>
<timestamp>' + CONVERT(NVARCHAR(30), GETDATE(), 120) + '</timestamp>
<processing_procedure>spProcessStep1</processing_procedure>
</Message>
';
-- Begin a dialog conversation
BEGIN DIALOG CONVERSATION @dlg
FROM SERVICE [StoredProcedureService]
TO SERVICE 'StoredProcedureService'
ON CONTRACT [DEFAULT]
WITH ENCRYPTION = OFF;
-- Send the XML message to the Service Broker queue using the conversation handle
SEND ON CONVERSATION @dlg (@message_body);
-- End the dialog conversation
END CONVERSATION @dlg;
但是我在 tbl_log 中没有得到任何信息,这表明激活过程没有被触发。
激活过程链接到队列
SELECT name, activation_procedure
FROM sys.service_queues
WHERE name = 'StoredProcedureQueue';
当我询问时
SELECT * FROM sys.transmission_queue
SELECT * FROM sys.conversation_endpoints
我什么也没看到,除了有时看到一些记录,有时看不到。我不确定这是否意味着我的消息正在得到处理,但我仍然没有在 tbl_log 中看到激活过程的结果
有一次这些给了我记录,第一个 ... Transmission_status:找不到目标服务名称 ... 和第二个 ... state_desc:DISCONNECTED_OUTBOUND ...
我是db_owner,所以权限应该不是问题
有人知道该怎么做吗? 顺便说一句,上面的代码主要也是由 Chat GPT 提供的
当 SQL 队列无法在 SQL Server 中启动激活过程时,请通过验证数据库权限进行故障排除,Charter Spectrum Internet 确保激活过程存在并正确配置。检查 SQL Server 错误日志中是否有任何相关消息,并查看事件查看器日志中是否存在潜在问题。考虑重新启动 SQL Server 服务并监视任何重复出现的错误。如果问题仍然存在,请向数据库管理员或 SQL Server 支持资源寻求帮助。