是否可以设置Microsoft SQL Server以定期运行存储过程?
是的,在MS SQL Server中,您可以创建预定作业.在SQL Management Studio中,导航到服务器,然后展开SQL Server代理项,最后展开Jobs文件夹以查看,编辑和添加预定作业.
如果正在使用MS SQL Server Express Edition,则SQL Server代理不可用.我发现以下适用于所有版本:
USE Master GO IF EXISTS( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[MyBackgroundTask] GO CREATE PROCEDURE MyBackgroundTask AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- The interval between cleanup attempts declare @timeToRun nvarchar(50) set @timeToRun = '03:33:33' while 1 = 1 begin waitfor time @timeToRun begin execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure]; end end END GO -- Run the procedure when the master database starts. sp_procoption @ProcName = 'MyBackgroundTask', @OptionName = 'startup', @OptionValue = 'on' GO
一些说明:
值得在某处编写审计条目,以便您可以看到查询实际运行.
服务器需要重新启动一次以确保脚本第一次运行.
一个相关的问题是:如何在SQL Server Express Edition中每天运行存储过程?
是的,如果您使用SQL Server代理.
打开企业管理器,转到您感兴趣的SQL Server实例下的Management文件夹.在那里您将看到SQL Server代理,在其下方您将看到"作业"部分.
在这里,您可以创建一个新工作,您将看到需要创建的步骤列表.创建新步骤时,可以指定实际运行存储过程的步骤(键入TSQL脚本).选择数据库,然后为命令部分输入如下内容:
exec MyStoredProcedure
这是概述,如果您需要任何进一步的建议,请回到此处.
[我实际上以为我可能会先进入这个,男孩我错了:)]
可能不是您正在寻找的答案,但我发现仅使用Windows Server任务计划程序更有用
您可以直接使用该命令 sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"
甚至创建一个.bat
文件.所以你甚至可以按需点击2次任务.
这也是在这里找到的
我将添加一件事:我在那里,我们曾经有过一堆每天晚上都要运行的批处理作业.但是,我们正在逐渐远离使用在Windows计划任务中安排的客户端应用程序,这些任务将启动每项工作.至少有三个原因:
我们有一些控制台程序也需要每晚运行.这样,所有计划任务都可以在一个地方.当然,这会造成单点故障,但如果控制台工作没有运行,我们无论如何都会在第二天失去一天的工作.
启动作业的程序从服务器捕获打印消息和错误,并将它们写入我们所有批处理过程的公共应用程序日志中.它使得使用sql作业进行日志记录变得更加简单.
如果我们需要升级服务器(我们希望尽快这样做),我们不需要担心将工作转移.只需重新指出应用程序一次.
这是一个真正简短的VB.Net应用程序:如果有人感兴趣,我可以发布代码.