如何安排作业以使SQL查询每天运行?


Answers:


164
  1. 展开“ SQL Server代理”节点,然后右键单击“ SQL Server代理”中的“作业”节点,然后选择 'New Job'

  2. 'New Job'窗口中,输入作业名称和'General'选项卡上的描述。

  3. 'Steps'在窗口的左侧选择,然后单击'New'底部的。

  4. 'Steps'窗口中输入步骤名称,然后选择要对其运行查询的数据库。

  5. 将要运行的T-SQL命令粘贴到“命令”窗口中,然后单击'OK'

  6. 单击'Schedule'“新作业”窗口左侧的菜单,然后输入计划信息(例如,每天和一个时间)。

  7. 单击'OK'-就是这样。

(当然,您还可以添加其他选项-但我要说的是,这是您设置和安排工作的最低要求)


如何在sql server express上做到这一点?sql server附带的代理会提供高级服务吗?
Bilal Fazlani

6
不用说,取决于您以谁登录,您可能根本看不到SQL Server代理节点。并非所有人都以sa身份登录。有关此处的其他信息(相当干燥)。. msdn.microsoft.com/zh-cn/library/ms188283.aspx
Fetchez la vache

如果SQL Server Agent节点不可使用标签“已禁用Agent XP”进行扩展,则运行此代码sp_configure'show advanced options',1; 重新配置;GO sp_configure'Agent XPs',1; GO RECONFIGURE GO该链接下有解释:msdn.microsoft.com/zh-cn/library/ms178127.aspx
Barry Guvenkaya 2016年

4
也许可以使用脚本BAT,CMD,Powershell以编程方式
Kiquenet

115

我对接受的答案中的步骤进行了GIF动画处理。这来自MSSQL Server 2012

计划SQL作业


8
GIF-多么有创意!:)
Zeek2 '18

9
这应该是stackoverflow中最受欢迎的答案。
Goutham Anush

1
是否必须使用sa登录?我没有使用sa登录,也没有看到sql server代理。我认为我没有足够的权利看到它。
Alper

1
若要在菜单树中查看“ SQL Server代理”区域,以身份登录的用户需要对MSDB数据库具有正确的权限(MSDB是SSMS用于诸如权限之类的内置数据库)。从主树浏览器中,依次转到安全性>登录名>您的用户名>右键单击>属性>用户映射>检查msdb>然后在下面检查SQLAgentOperatorRole
S.Mason,

18

要在t-sql中执行此操作,可以使用以下系统存储过程来安排日常作业。本示例每天计划在1:00 AM。有关各个存储过程的语法和有效参数范围的详细信息,请参见Microsoft帮助。

DECLARE @job_name NVARCHAR(128), @description NVARCHAR(512), @owner_login_name NVARCHAR(128), @database_name NVARCHAR(128);

SET @job_name = N'Some Title';
SET @description = N'Periodically do something';
SET @owner_login_name = N'login';
SET @database_name = N'Database_Name';

-- Delete job if it already exists:
IF EXISTS(SELECT job_id FROM msdb.dbo.sysjobs WHERE (name = @job_name))
BEGIN
    EXEC msdb.dbo.sp_delete_job
        @job_name = @job_name;
END

-- Create the job:
EXEC  msdb.dbo.sp_add_job
    @job_name=@job_name, 
    @enabled=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name;

-- Add server:
EXEC msdb.dbo.sp_add_jobserver @job_name=@job_name;

-- Add step to execute SQL:
EXEC msdb.dbo.sp_add_jobstep
    @job_name=@job_name,
    @step_name=N'Execute SQL', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_fail_action=2, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=N'EXEC my_stored_procedure; -- OR ANY SQL STATEMENT', 
    @database_name=@database_name, 
    @flags=0;

-- Update job to set start step:
EXEC msdb.dbo.sp_update_job
    @job_name=@job_name, 
    @enabled=1, 
    @start_step_id=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name, 
    @notify_email_operator_name=N'', 
    @notify_netsend_operator_name=N'', 
    @notify_page_operator_name=N'';

-- Schedule job:
EXEC msdb.dbo.sp_add_jobschedule
    @job_name=@job_name,
    @name=N'Daily',
    @enabled=1,
    @freq_type=4,
    @freq_interval=1, 
    @freq_subday_type=1, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=1, 
    @active_start_date=20170101, --YYYYMMDD
    @active_end_date=99991231, --YYYYMMDD (this represents no end date)
    @active_start_time=010000, --HHMMSS
    @active_end_time=235959; --HHMMSS

2
太棒了 正是我所需要的。谢谢:)
AJ。

9

使用T-SQL:我的工作正在执行存储过程。您可以轻松更改@command以运行sql。

EXEC msdb.dbo.sp_add_job  
   @job_name = N'MakeDailyJob',   
   @enabled = 1,   
   @description = N'Procedure execution every day' ; 

 EXEC msdb.dbo.sp_add_jobstep  
    @job_name = N'MakeDailyJob',   
    @step_name = N'Run Procedure',   
    @subsystem = N'TSQL',   
    @command = 'exec BackupFromConfig';

 EXEC msdb.dbo.sp_add_schedule  
    @schedule_name = N'Everyday schedule',   
    @freq_type = 4,  -- daily start
    @freq_interval = 1,
    @active_start_time = '230000' ;   -- start time 23:00:00

 EXEC msdb.dbo.sp_attach_schedule  
   @job_name = N'MakeDailyJob',  
   @schedule_name = N'Everyday schedule' ;

 EXEC msdb.dbo.sp_add_jobserver  
   @job_name = N'MakeDailyJob',  
   @server_name = @@servername ;

-1

这是一个示例代码:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300

21
在答案中添加代码说明通常是个好主意(即使对您而言很明显)。
内森·休斯

这个答案没有足够的解释。没有足够的解释,读者将无法理解该答案。
吉诺·沙吉

-2

如果要每天备份// //将以下sql脚本存储在C:\ Users \ admin \ Desktop \ DBScript \ DBBackUpSQL.sql中

DECLARE @pathName NVARCHAR(512),
 @databaseName NVARCHAR(512) SET @databaseName = 'Databasename' SET @pathName = 'C:\DBBackup\DBData\DBBackUp' + Convert(varchar(8), GETDATE(), 112) + '_' + Replace((Convert(varchar(8), GETDATE(), 108)),':','-')+ '.bak' BACKUP DATABASE @databaseName TO DISK = @pathName WITH NOFORMAT, 
INIT, 
NAME = N'', 
SKIP, 
NOREWIND, 
NOUNLOAD, 
STATS = 10 
GO

打开任务计划程序

创建任务->选择Triggers选项卡选择New

按钮选择每日单选按钮

点击Ok按钮

然后点击 Action选项卡选择新建。

在程序/脚本文本框中输入按钮"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"(确保匹配文件路径,并将双引号路径放在开始->搜索框中,如果找到,则单击它,然后查看是否存在备份)

-可能插入了上述路径100写90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.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.