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


Это зависит от того, чего вы хотите достичь. Хотите где-нибудь хранить удаленные архивы? Записать изменения? Задание SQL должно работать лучше, поскольку оно выполняется непосредственно в базе данных, но проще предоставить службе доступ к ресурсам за пределами базы данных. Так что это зависит от того, что вы хотите сделать ,,,
Зачем тебе это делать? Есть много более простых способов запустить запланированное задание.
Я бы подумал, что запланированное задание SQL будет более безопасным решением, поскольку, если база данных переносится на новый компьютер, кто-то, выполняющий миграцию, может забыть, что задействована служба Windows, и забыть запустить / установить ее на новом сервере.
В прошлом у нас выполнялось несколько заданий SQL. Однако недавно мы перешли к вызову этих процессов из кода .Net в качестве клиентского приложения, запускаемого из задачи расписания Windows, по двум причинам:
Это для вас / для дома или это часть продукта, который вы распространяете.
Если дома, я бы сказал, что это работа по SQL. Это тоже еще одна услуга.
Если это часть продукта, который вы распространяете, я бы подумал, как будет осуществляться установка и поддержка.
Обратите внимание, что независимо от того, как вы это делаете, для этой задачи вам не нужна услуга. Службы работают весь день и весь день потребляют небольшую часть оперативной памяти сервера.
В этом случае у вас есть задача, которую нужно выполнять, и выполнять ее раз в день, каждый день. Таким образом, вам нужно либо задание в SQL Server, либо, как описал Джоэл, приложение (консоль или winforms), которое было настроено по расписанию для выполнения, а затем выгрузки из пространства памяти сервера.
Следуя за точкой зрения Кори, если она распространяется извне, нужно ли вам поддерживать SQL Express? Если нет, я бы сразу занялся SQL-заданием. В противном случае вам придется проявить больше творчества, поскольку в SQL Express нет агента SQL, который поставляется с полными версиями SQL 2005 (а также MSDE). Без агента SQL вам понадобится другой способ автоматического запуска задания. Это может быть служба Windows, запланированная задача (вызов приложения .NET, сценария PowerShell, сценария VBscript и т. д.) Или вы можете попытаться напрямую реализовать какой-либо триггер в SQL Server.
Как насчет использования задания агента SQL для выполнения запланированной задачи, которая вообще не требует взаимодействия с базой данных? Это «неправильно» ?!