如何在SQL Server Express Edition中每天运行存储过程?

Tho*_*att 24 sql sql-server scheduled-tasks sql-server-express

如何在SQL Server Express Edition中每天的特定时间运行存储过程?

笔记:

  • 这是截断审计表所必需的
  • 另一种方法是修改插入查询,但这可能效率较低
  • SQL Server Express Edition没有SQL Server代理

相关问题:

Raj*_*ore 24

由于SQL Server Express不附带SQL代理,因此您可以使用Windows调度程序运行带有存储过程或SQL脚本的SQLCMD.

http://msdn.microsoft.com/en-us/library/ms162773.aspx


Tho*_*att 8

我发现以下机制对我有用.

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
Run Code Online (Sandbox Code Playgroud)

一些说明:

  • 值得在某处编写审计条目,以便您可以看到查询实际运行.
  • 服务器需要重新启动一次以确保脚本第一次运行.


Vot*_*fee 5

创建一个在启动时调用“C:\YourDirNameHere\TaskScript.vbs”的计划任务。VBScript 应该执行重复的任务执行(在这个例子中,它是一个 15 分钟的循环)

通过命令行(必须以管理员身份运行 cmd.exe):

schtasks.exe /create /tn "TaskNameHere" /tr "\"C:\YourDirNameHere\TaskScript.vbs\" " /sc ONSTARTUP
Run Code Online (Sandbox Code Playgroud)

示例 TaskScript.vbs:这将使用 RunSQLScript.bat 静默执行您的自定义 SQL 脚本

Do While 1
    WScript.Sleep(60000*15)
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.RUN "cmd /c C:\YourDirNameHere\RunSQLScript.bat C:\YourDirNameHere\Some_TSQL_Script.sql", 0
Loop
Run Code Online (Sandbox Code Playgroud)

RunSQLScript.bat:这个使用sqlcmd调用数据库实例并执行SQL脚本

@echo off
sqlcmd -S .\SQLEXPRESS -i %1
Run Code Online (Sandbox Code Playgroud)