Windows服务或SQL作业?

时间:2008-10-30 15:10:25

标签: sql windows sql-server-2005 windows-services

我有一个归档过程,基本上会在一定天数后删除归档记录。编写预定的SQL作业或Windows服务来完成删除是否更好?数据库是mssql2005。

更新

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

6 个答案:

答案 0 :(得分:8)

这取决于你想要完成什么。 您想将删除的档案存储在某个地方吗?记录更改? SQL作业应该更好地执行,因为它直接在数据库中运行,但是更容易为数据库外部的资源提供服务访问。所以这取决于你想做什么,,,

答案 1 :(得分:7)

我认为预定的SQL作业将是一个更安全的解决方案,因为如果将数据库迁移到新计算机,执行迁移的人可能会忘记涉及到Windows服务而忘记在新服务器上启动/安装它

答案 2 :(得分:5)

过去我们已经运行了很多SQL作业。然而,最近,我们一直在将这些流程从.Net代码调用为从Windows计划任务运行的客户端应用程序,原因有两个:

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

答案 3 :(得分:2)

请注意,无论您如何操作,对于此任务,您都不需要服务。服务全天运行,并且会整天消耗服务器的一些内存。

在此,您需要运行一项任务,并且每天运行一次。因此,您要么在SQL Server中找到一份工作,要么在Joel中描述了一个按计划设置的应用程序(控制台或winforms),然后从服务器的内存空间卸载。

答案 4 :(得分:1)

这是针对您/内部的,还是您分发的产品的一部分。

如果在内部,我会说SQL工作。那也只是另一项服务。

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

答案 5 :(得分:0)

关注Corey的观点,如果这是外部分发的,您是否需要支持SQL Express?如果没有,我会直接使用SQL作业。否则,您将不得不变得更有创意,因为SQL Express没有SQL 2005的完整版本(以及MSDE)附带的SQL代理。如果没有SQL Agent,您将需要另一种方法来自动触发作业。它可以是Windows服务,计划任务(调用.NET应用程序,PowerShell脚本,VBscript等),或者您可以尝试直接在SQL Server中实现某些触发器。