如何在SQL Server Express版中创建作业

90

请问有人可以解释一下如何在SQL Server Express版中创建作业吗?


6
如果你指的是 SQL Agent 作业,那么在 Express 版本中该功能是不可用的。请参考这个问题的答案,了解其他可能性:https://dev59.com/J1DTa4cB1Zd3GeqPLbQ6#3789024 - 8kb
1
Express 版本支持 SQL Server Broker,您可以创建自定义机制,例如这里 - Lukasz Szozda
3个回答

134

SQL Server Express 不包括 SQL Server Agent, 因此无法创建 SQL Agent 作业。

您可以通过手动创建批处理文件和 SQL 脚本文件,并通过 Windows 任务计划程序运行它们来创建作业。
例如,您可以使用两个文件备份数据库:

backup.bat:

sqlcmd -i backup.sql

backup.sql:

backup database TeamCity to disk = 'c:\backups\MyBackup.bak'

只需将两个文件放入同一文件夹中,并通过Windows任务计划程序执行批处理文件。

第一个文件只是一个Windows批处理文件,它调用sqlcmd实用程序并传递一个SQL脚本文件。
SQL脚本文件包含T-SQL。在我的示例中,只有一行用于备份数据库,但您可以放置任何T-SQL。例如,您可以执行一些UPDATE查询。


如果您想创建的工作是备份、索引维护或完整性检查,您也可以使用Ola Hallengren的Maintenance Solution。它由一堆存储过程(以及针对SQL Server非Express版本的SQL代理作业)组成,在FAQ中有一个关于如何在SQL Server Express上运行作业的部分。

如何在SQL Server Express上使用SQL Server维护解决方案?

由于SQL Server Express没有SQL Server代理,因此必须使用cmd文件和Windows计划任务来安排存储过程的执行。请按照以下步骤操作:

  1. 下载MaintenanceSolution.sql。

  2. 执行MaintenanceSolution.sql。此脚本将创建所需的存储过程。

  3. 创建用于执行存储过程的cmd文件;例如:
    sqlcmd -E -S .\SQLEXPRESS -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = N'C:\Backup', @BackupType = 'FULL'" -b -o C:\Log\DatabaseBackup.txt

  4. 在Windows计划任务中创建任务以调用cmd文件。

  5. 安排任务。

  6. 启动任务并验证它们是否成功完成。


1
我应该在哪里指定登录信息? - HasanG
1
如果您正在创建运行SQLCMD(带或不带BAT文件)的计划任务,我建议您使用SQLCMD的“-E”参数进行Windows身份验证。为此,请定义一个SQL Server登录名,用于您的Windows计划任务所有者的Windows用户。如果不清楚任务运行的Windows登录名,请将“WHOAMI”(DOS命令)放入BAT文件中并捕获BAT文件输出,以查看谁在执行。 - Doug_Ivison
@HasanGürsoy 或者,对于 SQL Server 身份验证,我会将密码放在 Windows 计划任务中(权限控制谁可以读取它),而不是将其放在任何文件中。它出现在 BAT 文件命令行上。如果它是传递给 BAT 文件的第一个参数,则在 BAT 文件内部,您可以将其称为 %1,例如在 SQLCMD 行上。 - Doug_Ivison

46

在SQL Server Express版中,创建SQL Agent作业的功能不可用。一种替代方法是使用Windows任务计划程序执行批处理文件来执行SQL脚本。

要执行此操作,请首先创建一个名为sqljob.bat的批处理文件。

sqlcmd -S servername -U username -P password -i <path of sqljob.sql>

用你自己的servernameusernamepasswordpath替换原有的内容。

然后创建名为sqljob.sql的SQL脚本文件。

USE [databasename]
--T-SQL commands go here
GO

请将 [databasename] 替换为您的数据库名称。在编写 SQL 脚本时使用 USEGO 是必要的。

sqlcmd 是一个命令行实用程序,用于执行 SQL 脚本。创建这两个文件后,可以使用 Windows 任务计划程序执行批处理文件。

NB:此前针对此问题发布了几乎相同的回答,但我认为它不完整,因为它没有说明如何使用 sqlcmd 登录信息。


我应该把sqljob.sql保存在哪里?我该如何设置它的执行时间? - WTFZane
1
@WTFZane,没关系,只要批处理文件执行的人可以访问到该位置即可(在上面的脚本中,用你使用的任何位置替换 path of sqljob.sql)。请记住,这里的 *.sql 文件只是一个文本文件。 - Abel

16

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接