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


Answers:


123

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

您可以做的是:
您可以通过创建批处理文件和SQL脚本文件并通过Windows Task Scheduler运行它们来“手动”创建作业。
例如,您可以使用两个文件来备份数据库,如下所示:

backup.bat:

sqlcmd -i backup.sql

backup.sql:

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

只需将两个文件放入同一个文件夹,然后通过Windows Task Scheduler执行批处理文件。

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


如果要创建的作业是用于备份,索引维护或完整性检查的,则还可以使用Ola Hallengren出色的维护解决方案

它由一堆存储过程(以及用于SQL Server非Express版本的SQL Agent作业)组成,并且在FAQ中有关于如何在SQL Server Express上运行作业的部分:

如何开始使用SQL Server Express上的SQL Server维护解决方案?

SQL Server Express没有SQL Server代理。因此,必须使用cmd文件和Windows Scheduled Tasks调度存储过程的执行。跟着这些步骤。

SQL Server Express没有SQL Server代理。因此,必须使用cmd文件和Windows Scheduled Tasks调度存储过程的执行。跟着这些步骤。

  1. 下载MaintenanceSolution.sql。

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

  3. 创建cmd文件以执行存储过程;例如:
    sqlcmd -E -S。\ SQLEXPRESS -d master -Q“执行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
@HasanGürsoy如果要创建运行SQLCMD的计划任务(带或不带BAT文件),建议您使用SQLCMD的“ -E”参数进行Windows身份验证。为此,请为Windows计划任务的所有者Windows用户定义一个SQL Server登录名。如果不清楚任务在哪个Windows登录下运行,请在BAT文件中放入“ WHOAMI”(DOS命令)并捕获BAT文件的输出,以查看谁在执行。
Doug_Ivison

@HasanGürsoy或者,对于SQL Server身份验证,我会将密码放在Windows计划的任务(权限控制谁可以读取)中,而不是将其放在文件中的任何位置。它在BAT文件命令行上运行。如果它是传递给BAT文件的第一个参数,则可以在BAT文件中将其称为%1,例如在SQLCMD行上。
Doug_Ivison

40

SQL Server Express Edition中不提供创建SQL代理作业的功能。一种替代方法是执行一个批处理文件,该批处理文件使用Windows Task Scheduler执行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 Task Scheduler执行批处理文件。

注意:之前针对此问题发布了几乎相同的答案。但是我觉得它不完整,因为它没有使用指定登录信息sqlcmd


我在哪里保存该sqljob.sql?以及如何执行?
WTFZane

1
@WTFZane没关系,只要可以从执行批处理文件的任何人那里获得该位置即可。(在上面的脚本中,替换path of sqljob.sql为您使用的任何位置)。请记住,*.sql这里的文件仅是文本文件而已。
亚伯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.