0

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

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

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

4

2 回答 2

1

由于您使用的是 SQL Express,因此您不能使用 SQL Server 代理。但是有许多替代方案,您可以根据您的操作系统使用schtasksWindows 任务计划程序来安排所有这些:

所有这些语言/工具(以及许多其他语言)都能够连接到 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
    

要在您的计划任务列表中查看此任务(有很多,但它应该在第一组):

schtasks /query

如果您以后想删除它:

schtasks /delete /tn "some name" /F
于 2013-03-12T20:37:23.573 回答
1

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

于 2013-03-12T20:36:06.607 回答