Я хотел бы отобразить информацию о ходе работы для пользователя во время работы хранимой процедуры (несколько настроек). Весь код sql заключен в транзакции, поэтому я использую сервис-брокер для получения обновлений в реальном времени. Не могли бы вы подсказать, что не так с кодом ниже, поскольку я не получаю никаких сообщений в моей очереди?
Есть ли лучший способ сделать это?Выполнение транзакции 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
Спасибо, я двигался от одного дБ к другому, и я пропустил это :) – witpo
Я пытаюсь переместить код выше (с помощью enable_broker) на свой тестовый сервер (стандарт SQL2008R2). Если я создаю новую базу данных, все будет в порядке. Но я не могу заставить его работать над уже существующим db. Я использую учетную запись sa, поэтому привилегии не должны быть проблемой. Основными отличиями являются уровень сопоставления и совместимости (2005 против 2008). Я изменил уровень совместимости - никакой разницы. Какие-либо предложения? – witpo
Ничего не могу придумать. Предположительно, 'ENABLE_BROKER' определенно установлен? Можете ли вы видеть, как настраиваемое пользователем событие запускается при использовании Profiler? Если да, то оба могут попытаться сбросить все объекты и снова создать. –