在Express Edition中的特定日期执行过程

时间:2013-03-12 20:34:08

标签: sql-server sql-server-express jobs

我有从客户端表复制数据历史表的过程。

如何在某个特定日期每个月不涉及用户按下按钮的情况下自动执行此操作?

我正在使用SQL Server 2008 Express Edition,因此无法使用SQL Server代理安排作业。

2 个答案:

答案 0 :(得分:1)

在SQL Express中,这是不可能的 - 您需要编写一个执行此操作的程序,然后您可以使用Windows任务调度程序来执行该程序。更高版本的SQL Server包括SQL Server代理,您可以为它运行。

答案 1 :(得分:1)

由于您使用的是SQL Express,因此无法使用SQL Server代理。但是,有许多替代方案,您可以根据您的操作系统使用schtasksWindows Task Scheduler安排所有替代方案:

所有这些语言/工具(以及许多其他语言/工具)都能够连接到SQL Server并执行存储过程。您还可以尝试这些代理替换:

以下是使用VBScript的示例:

  1. 打开记事本。键入以下代码,将$ tokens $替换为您的实际值:

    s = "$your server/instance name$"
    db = "$your database name$"
    u = "$your SQL auth user ID$"
    p = "$your SQL auth password$"
    constr = "provider=SQLOLEDB;Data Source=" & s & ";Initial Catalog=" & s & _
             ";User ID=" & u & ";Password=" & p & ";Network=DBMSSOCN;"
    Set conn = CreateObject("ADODB.Connection")
    conn.Open constr
    conn.Execute "EXEC dbo.$your procedure name$;"
    conn.close: set conn = nothing
    
  2. 将此文件另存为c:\somewhere\ScheduledProcedure.vbs

  3. 打开命令提示符并键入以下内容(这将安排此脚本在每个月的15号午夜运行),所有这些都在一行上:

    schtasks /create /tn "some name" 
      /tr "wscript ""c:\somewhere\ScheduledProcedure.vbs""" 
      /sc monthly /d 15 /st 00:00
    
  4. 要在计划任务列表中查看此任务(有很多,但它应该在第一组中):

    schtasks /query
    

    如果您以后想删除它:

    schtasks /delete /tn "some name" /F