gpt4 book ai didi

sql-server - 事务中的sql进度记录

转载 作者:行者123 更新时间:2023-12-04 03:07:21 26 4
gpt4 key购买 nike

我想在存储过程运行时为用户显示进度反馈(多个 setps)。所有 sql 代码都在事务中,所以我使用服务代理来获取实时更新。你能告诉我下面的代码有什么问题吗,因为我的队列中没有收到任何消息?
有更好的方法吗?

--queue
create queue myQueue

--service
create service myLogs
on queue myQueue ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);

--log handler
create event notification myLogHandler
on server
for userconfigurable_0
to service 'myLogs', 'current database' ;

--message
EXEC master..sp_trace_generateevent @event_class = 82, @userinfo = N'test msg'

---transaction test
begin transaction
EXEC master..sp_trace_generateevent @event_class = 82, @userinfo = N'tran test msg'
rollback transaction


--receive message
declare @message_body xml;
receive top (1) @message_body = message_body
from myQueue
select @message_body

--display queue
select * from myQueue

最佳答案

一个可以说更简单的方法是:

--------------------------------
--Worker process
--------------------------------

BEGIN TRANSACTION

--While in your loop or at each stage of the proc you can do this
INSERT INTO MyLoggingTable VALUES('My Message')

COMMIT

--------------------------------
--Reporting process
--------------------------------

SELECT * FROM MyLoggingTable WITH (NOLOCK)

NOLOCK 允许您读取进程的进度,即使它在事务中记录到它也是如此。

请注意,这允许您“实时”读取数据,但如果工作进程进行回滚,则数据将被删除。

您可以通过登录到@MyTable 来解决这个问题,这将在回滚后继续存在,因此您可以回滚,然后将@MyTable 的内容复制到MyLoggingTable。

关于sql-server - 事务中的sql进度记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com