【发布时间】:2013-02-28 13:48:48
【问题描述】:
我有从客户表复制数据到历史表的过程。
如何在不涉及用户在特定日期每个月按下按钮的情况下自动执行此操作?
我使用的是 SQL Server 2008 Express Edition,因此无法使用 SQL Server 代理安排作业。
【问题讨论】:
标签: sql-server sql-server-express jobs
我有从客户表复制数据到历史表的过程。
如何在不涉及用户在特定日期每个月按下按钮的情况下自动执行此操作?
我使用的是 SQL Server 2008 Express Edition,因此无法使用 SQL Server 代理安排作业。
【问题讨论】:
标签: sql-server sql-server-express jobs
由于您使用的是 SQL Express,因此您不能使用 SQL Server 代理。但是有很多替代方案,您可以根据您的操作系统使用schtasks 或Windows Task Scheduler 安排所有这些方案:
所有这些语言/工具(以及许多其他语言)都能够连接到 SQL Server 并执行存储过程。您也可以尝试以下代理替换:
这是一个使用 VBScript 的示例:
打开记事本。输入以下代码,将 $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
将此文件另存为c:\somewhere\ScheduledProcedure.vbs
打开命令提示符并键入以下内容(这将安排此脚本在每个月的 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
【讨论】:
在 SQL Express 中这是不可能的 - 您需要编写一个程序来执行此操作,然后您可以使用 Windows 任务调度程序来执行该程序。更高版本的 SQL Server 包括 SQL Server Agent,您可以使用它来为您运行。
【讨论】: