SQL Server CLR для внедрения бизнес-логики и планирования выполнения с помощью агента SQL Server.

У меня есть бизнес-логика приложения, похожего на рабочий процесс, в библиотеке классов С#, но в конце каждого месяца необходимо вызывать определенный процесс в библиотеке, я подумал, что идеальный механизм для вызова этого запланированного выполнения использует агент сервера Sql (желательно задание sql, хотя я готов даже пойти в ад SSIS, если это абсолютно необходимо), но вопрос в том, как мне вызвать процесс библиотеки приложений из задания sql?

библиотека приложений также используется со страниц asp.net, поэтому обычно она имеет контекст веб-приложения (web.config) с настроенными входными и выходными базами данных.

Я понимаю, что шаги более или менее

1) встроить библиотеку классов в сборку CLR сервера sql, поставить сильный знак ключа и развернуть ее 2) вызвать библиотеку

мне непонятно, что при развертывании такой сборки CLR происходит с контекстом веб-приложения? как мне развернуть CLR с соответствующим app.config? нужно ли повторно развертывать CLR, если мне нужно изменить строки подключения?

Я не уверен также, потому что CLR необходимо подключиться к базе данных, которая ее вызывает (для чтения и записи таблиц), но я предполагаю, что нужно быть особенно осторожным, чтобы избежать самовызова и тому подобного.


person lurscher    schedule 17.06.2010    source источник
comment
нет идей по этому поводу?   -  person lurscher    schedule 25.06.2010


Ответы (1)


Во-первых, этот пост заканчивается на «использовать SSIS» :-P

Пока ваша библиотека содержит ссылки на System.Web.dll, я не думаю, что вы сможете зарегистрировать ее в SQL Server как сборку SQLCLR. Сборки SQLCLR очень ограничены и не могут содержать никаких ссылок.

Вы можете переместить определенные интерфейсные части вашей бизнес-логики в отдельную библиотеку уровня представления. Как правило, это лучшее решение, чем смешивание бизнес-логики и классов представления, таких как контекст веб-приложения. После этого вы можете попробовать развернуть свою сборку на SQL Server.

Теперь вы можете создать вторую библиотеку SQLCLR, содержащую хранимые процедуры .NET, которые управляют вашими бизнес-объектами.

Однако я не вижу здесь преимущества SQLCLR. Это потребует огромных изменений в вашем исходном коде и приведет к ряду ограничений для всего вашего приложения.

Мои личные предпочтения: Либо используйте пакет SSIS. Здесь вы можете ссылаться на любую другую DLL и использовать ее функциональность. Или напишите простое консольное приложение .NET, которое будет запускаться агентом SQL. В обоих случаях реализация практически одинакова.

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

person Florian Reischl    schedule 22.07.2010
comment
Действительно, вы можете развернуть System.Web и многие другие библиотеки FCL на SQL, но только 2.0/3.0/3.5, а не 4.0. - person abatishchev; 23.07.2010