Запустить код С# внутри задания агента SQL

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

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

Ответ 1

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

enter image description here

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

Ответ 2

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

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

Наконец, если ваше приложение "очень" просто, вы можете рассмотреть возможность просто обернуть вызовы обновления базы данных в простом консольном приложении. Таким образом, вы можете просто вызвать приложение через Task Scheduler, встроенный в Windows, для запуска в определенные дни/время и т.д.

Ответ 3

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

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