Выполнить код C # внутри задания агента SQL - PullRequest
13 голосов
/ 11 июля 2011

У меня есть кусок кода, который должен запускаться каждый день в указанное время.Код прямо сейчас является частью моего веб-приложения.Есть 2 хранимые процедуры для получения / сохранения данных, которые использует код.

Как настроить Microsoft SQL Server Management Studio 2008 R2 для выполнения моего кода, а также сохраненных процедур в задании агента SQL.Я никогда не делал этого раньше и не могу найти документацию.

Ответы [ 3 ]

17 голосов
/ 11 июля 2011

Самый простой способ - создать консольное приложение .NET, которое будет просто оболочкой для вашего реального кода, находящегося в DLL, веб-службе или где-либо еще. Затем в задании агента SQL создайте шаг типа «Операционная система (CmdExec)», который вызывает ваше консольное приложение. Избавляет вас от хлопот SSIS (и это одна из проблем, которую стоит избегать major ). Я также согласен с @Hasanain, что .NET proc может быть другой разумной альтернативой.

enter image description here

Еще одна вещь, которую стоит отметить. Агент SQL CmdExec будет искать целочисленный код возврата, поэтому ваш метод public static int Main(string args[]) {} вернет 0 для успеха и некоторое отрицательное число для сбоя. Или, если вы выбросите исключение, это тоже будет работать нормально. И агент SQL будет записывать текст из того, что вы выбросили, поскольку консольное приложение записало его в stdout / stderr.

10 голосов
/ 11 июля 2011

Вы должны прочитать о Sql Server Integration Services (SSIS) .Затем вы можете запланировать пакеты служб SSIS, которые являются единицами функциональности sql.В пакете служб SSIS вы можете запускать задания сценариев и вызывать функции CLR (Common Language Runtime - то есть .Net jobs) для выполнения вашего кода .net.

Хотя одна вещь, вы можете подумать об этом немного назадмода.Является ли основной причиной использования SSIS для планирования выполнения кода, который вызывает некоторые sql?Если это так, я бы порекомендовал вам исследовать / использовать Windows Workflow Foundation (WWF) .Это платформа .net для разработки и запуска «долгосрочных» действий .net.На простом уровне вы можете считать его эквивалентом SSIS для .Net программ.Он может быть встроен непосредственно в ваши приложения .Net без каких-либо знаний SSIS сервера sql.

Наконец, если ваше приложение «очень» простое, вы можете рассмотреть вопрос об объединении вызовов обновления базы данных в простом консольном приложении,Таким образом, вы можете просто вызвать приложение с помощью Task Scheduler, встроенного в Windows , для запуска в определенные дни / часы и т. Д.

2 голосов
/ 11 июля 2011

Вы можете создать хранимую процедуру .NET и добавить ее в SQL Server.Затем создайте задание агента SQL, которое будет вызывать эту новую хранимую процедуру.

Хранимая процедура .Net, по сути, должна быть ограничена небольшим набором библиотек .NET, которые уже встроены в SQL Server.Вы можете добавить свои собственные пользовательские библиотеки, чтобы обеспечить доступность всех необходимых функций.Однако, учитывая, что MS предупреждает, что нет гарантии, что все пользовательские библиотеки DLL будут работать, просто потребуется тщательное тестирование, чтобы убедиться в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...