2009-02-23 3 views
7

Возможно ли, чтобы триггер CLR в SQL Server 2005 отправил сообщение в очередь через MSMQ?SQL Server Trigger - отправить сообщение в очередь

Я использую тип проекта SQL Server, но System.Messaging не отображается в качестве ссылки, которую я могу добавить.

В принципе, мне нужно какое-то действие (печать), когда строка записывается в таблицу. Устройство, генерирующее строку, представляет собой ручной сканер, который может выполнять только базовые операции - один из которых записывает на SQL-сервер поверх odbc. Первоначальная идея состояла в том, чтобы просто опросить таблицу, захватить записи, распечатать записи, удалить записи. Это, вероятно, будет работать нормально, но это показалось хорошим примером и оправданием, чтобы узнать о очередях сообщений.

ответ

4

Да, это возможно.

Я бы не сделать это в триггере хотя: TXN будет оставаться открытым дольше, это ресурсоемкое, что, если он висит и т.д.

Вы можете обновить с помощью хранимой процедуры?

Или нажмите строку в таблицу опроса, контролируемую заданием агента SQL, которое записывает в очередь?

+0

Я думаю, что хранимая процедура работоспособна, но я до сих пор не знаю, какой дорожный блок мне нужен для доступа к System.Messaging из проектов SQL Server. Я использую Google и получаю смешанные сигналы. System.Messaging не доверена, поэтому SQL Server не будет работать с ней, или это неправильно? – anonymous

+0

Извините, я не использовал его сам. Вы посмотрели на Service broker, часть SQL Server 2005? – gbn

+0

Я кратко прочитал об этом. Я абсолютно наивна из-за этого, но, похоже, Service Broker позволил триггеру добавить сообщение в очередь Service Broker Queue, но тогда моя программа должна была бы опросить эту очередь, после чего я мог бы просто опросить таблицу. – anonymous

3

Если эта сборка ненадежна, вы все равно можете получить к ней доступ с SQL Server - она ​​просто недоступна изначально и должна быть импортирована вручную и помечена как «ненадежная». Некоторое время назад я столкнулся с этой проблемой с System.DirectoryServices.

Этот парень имеет один и тот же вопрос, что и вы с относительно System.DirectoryServices, но делает заявление о Создании УЗЕЛ таким же образом, позволит вам получить доступ к System.Messaging:

http://www.mydatabasesupport.com/forums/ms-sqlserver/218655-system-directoryservices-allowable-clr.html

0

Вот некоторые новые идеи о том, как можно обрабатывать эту старую проблему: http://nginn.org/blog/?p=376

Nginn-messagebus - это мой проект очередности сообщений на базе SQL-сервера и предназначен для приложений .NET, которые полагаются на SQL-сервер.

Смежные вопросы