Как я могу выполнить код .NET из SQL TRIGGER? - PullRequest
2 голосов
/ 18 августа 2010

У нас есть сайт в разработке, который поддерживает базу данных.Этот веб-сайт заменяет классические страницы ASP и приложения FoxPro вместе с новыми разработками, написанными на ASP.NET 3.5 (в основном VB, немного C # и немного AJAX).Однако есть и другие системы, которые обновляют нашу базу данных.

Из-за тех систем, которые выполняют такие вещи, как обновление статусов в наших данных, у нас есть несколько триггеров в базе данных (SQL Server 2005).Обычно это что-то простое, что обрабатывается в SQL, но теперь у нас есть кое-что еще.

Наши пользователи будут загружать и хранить файл (электронная таблица Excel), который будет иметь обновления для базы данных, которые должны обрабатываться только при внешнейСистема дает разрешение (т.е. когда срабатывает триггер).Файл будет сохранен как любое другое «вложение» (в нашей базе данных есть указатели на файлы в определенных каталогах), поскольку его необходимо предварительно проверить (задолго до того, как он будет фактически обработан).

Что мы хотим сделатьdo выполняет тот же метод, который «проверяет» файл (за исключением того времени, когда он фактически будет обрабатывать обновления) при срабатывании триггера SQL.

Существует ли относительно простой способ сделать это?

Ответы [ 4 ]

3 голосов
/ 18 августа 2010

Это было сделано до того, как вы начали использовать CLR Stored Procdure ...

См. Здесь пример http://www.codeproject.com/KB/database/Managed_Code_in_SQL.aspx

У Microsoft также есть несколько примеров CLR Примеры ядра СУБД SQL Server в кодовом сплетении.

Удачи вам в подписи DBA.

Другим вариантом является использование xp_cmdshell и выполнение «команды» в простой системе, которая затем может вызвать ваш код .net. Еще раз .. удачи с DBAS;)

Кроме этих двух, я не могу придумать какие-либо другие "простые" способы сделать это. Есть множество сложных способов сделать это ..

1 голос
/ 18 августа 2010

Без включения CLR на вашем SQL Server вы не сможете запускать хранимые на нем SQL CLR процессы и триггеры.

Между тем Триггер SQL CLR - лучшее решениедля вашей задачи

0 голосов
/ 18 августа 2010

Я хотел бы, чтобы триггер поместил запись в очередь для обработки, и чтобы очередь активно отслеживалась на предмет действий, которые необходимо выполнить. Это может быть так же просто, как таблица или сложный, как вызов веб-службы. Но это должно быть быстро.

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

0 голосов
/ 18 августа 2010

Я провел нечеткий поиск в сборках в базе данных.Это очень сложно.Прежде всего, вы не можете использовать расширения .NET 2.0 (V3.0, V3.5, V4.0) в зависимости от версии SQL Server.Во-вторых, вы должны убедиться, что вы используете только управляемый код.Отсутствие COM-взаимодействий и т. Д.

Я бы подумал о лучшем решении, поскольку триггеры должны быть очень быстрыми, а обработка Excel - очень медленнойКак насчет внешнего процесса, который опрашивает эту таблицу?

...