Windows Service или SQL Job?

У меня есть процесс архивирования, который в основном удаляет архивные записи по истечении заданного количества дней. Лучше ли писать запланированное задание SQL или службу Windows для выполнения удаления? База данных – mssql2005.

Обновить:

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

    Это зависит от того, чего вы хотите достичь. Вы хотите где-то хранить удаленные архивы? Зарегистрировать изменения? Задание SQL должно работать лучше, поскольку оно запускается непосредственно в базе данных, но легче предоставить службу доступ к ресурсам вне базы данных. Так что это зависит от того, что вы хотите сделать,

    Я думаю, что запланированное задание SQL было бы более безопасным решением, поскольку, если база данных будет перенесена на новый компьютер, кто-то, выполняющий миграцию, может забыть, что есть служба Windows, и забыть начать / установить ее на новый сервер.

    Раньше у нас было запущено несколько SQL-заданий. Однако в последнее время мы переходим на вызов этих процессов из .Net-кода в качестве клиентского приложения, запускаемого из задачи расписания Windows, по двум причинам:

    1. Легче реализовать такие функции, как ведение журнала таким образом.
    2. У нас есть другие пакетные задания, которые не запускаются в базе данных и поэтому должны быть в запланированных задачах Windows. Таким образом, все пакетные задания любого типа будут перечислены в одном месте.

    Обратите внимание, что независимо от того, как вы это делаете, для этой задачи вам не нужна услуга. Службы работают весь день, и каждый день он будет потреблять бит сервера.

    В этом случае у вас есть задача, которую вам нужно запускать, и запускать один раз в день, каждый день. Таким образом, вам нужно либо выполнить задание на SQL Server, либо как Joel описал приложение (консоль или winforms), которое было настроено в расписании для выполнения, а затем выгрузилось из памяти сервера.

    Это для вас / дома, или это часть продукта, который вы распространяете.

    Если в доме, я бы сказал, SQL-задание. Это еще одна услуга.

    Если это часть продукта, который вы распространяете, я бы рассмотрел, как будет выполняться установка и поддержка.

    Чтобы следить за точкой Кори, если это внешнее распространение, вам нужно будет поддерживать SQL Express? Если нет, я бы пошел с SQL-заданием напрямую. В противном случае вам нужно будет проявить больше креативности, поскольку SQL Express не имеет агента SQL, который поставляется с полными версиями SQL 2005 (а также MSDE). Без агента SQL вам понадобится другой способ автоматического запуска задания. Это может быть служба Windows, запланированная задача (вызов .NET-приложения, сценарий powershell, VBscript и т. Д.), Или вы можете попытаться реализовать какой-либо триггер в SQL Server напрямую.