Windows服务或SQL作业?

我有一个存档过程,基本上在一定天数后删除存档的logging。 编写一个预定的SQL作业或者一个windows服务来完成删除操作会更好吗? 数据库是mssql2005。

更新:

要谈到下面的一些答案,这个问题是关于内部应用程序,而不是分布式产品。

这取决于你想完成什么。 你想存储删除的档案在什么地方? 记录更改? 由于SQL作业直接在数据库中运行,因此应该执行得更好,但更容易将服务访问权限授予数据库之外的资源。 所以这取决于你想要做什么,,,

我认为一个预定的SQL工作将是一个更安全的解决方案,因为如果数据库迁移到一台新的机器上,那么进行迁移的人可能会忘记有一个Windows服务,并忘记在新的服务器上启动/安装它。

在过去,我们已经运行了一些SQL作业。 然而,最近,我们已经开始从.net代码调用这些进程作为从Windows时间表任务运行的客户端应用程序,原因有两个:

  1. 以这种方式进行日志记录是很容易实现的。
  2. 我们有其他批处理作业不在数据库中运行,因此必须在Windows计划任务中。 这样所有的任何类型的批处理作业将被列在一个地方。

请注意,不管你如何做,这个任务你不需要服务。 服务整天运行,并会整天消耗服务器的内存。

在这里,你需要运行一项任务,每天运行一次。 因此,您可能需要在SQL server中执行任务,或者Joel描述了按计划安装的应用程序(控制台或winforms),然后从服务器的内存空间中执行卸载。

这是给你/在家里,还是你发行的产品的一部分。

如果在家里,我会说SQL的工作。 这只是另一项服务。

如果它是你分发的产品的一部分,我会考虑如何安装和支持。

关于Corey的观点,如果这是外部分布式的,你需要支持SQL Express吗? 如果没有,我会直接与SQL作业。 否则,由于SQL Express不具有完整版本的SQL 2005(以及MSDE)附带的SQL代理,因此您必须获得更多的创造性。 没有SQL代理,你需要另一种方式来自动启动这个工作。 它可能是一个Windows服务,一个计划任务(调用.NET应用程序,PowerShell脚本,VB脚本等),或者你可以尝试直接在SQL server中实现一些触发器。