请求提供将现有操作员添加到SQL Server代理作业的脚本
将已存在操作员添加到SQL Server代理作业的脚本
脚本说明
以下脚本用于把已存在的SQL Server代理操作员关联到指定作业,可配置作业在执行失败、成功或完成时向该操作员发送通知。
完整脚本
-- 替换为你的实际参数值 DECLARE @JobName NVARCHAR(128) = N'目标作业名称'; DECLARE @OperatorName NVARCHAR(128) = N'已存在的操作员名称'; -- 通知类型:1=失败时通知,2=成功时通知,4=完成时通知;可组合(如1+2=3表示失败和成功都通知) DECLARE @NotifyLevel INT = 7; -- 校验作业是否存在 IF NOT EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = @JobName) BEGIN RAISERROR(N'作业 "%s" 不存在,请核对名称。', 16, 1, @JobName); RETURN; END -- 校验操作员是否存在 IF NOT EXISTS (SELECT 1 FROM msdb.dbo.sysoperators WHERE name = @OperatorName) BEGIN RAISERROR(N'操作员 "%s" 不存在,请核对名称。', 16, 1, @OperatorName); RETURN; END -- 移除已存在的重复通知配置(避免添加报错) IF EXISTS ( SELECT 1 FROM msdb.dbo.sysjoboperators WHERE job_id = (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = @JobName) AND operator_id = (SELECT operator_id FROM msdb.dbo.sysoperators WHERE name = @OperatorName) ) BEGIN EXEC msdb.dbo.sp_delete_jobnotification @job_name = @JobName, @operator_name = @OperatorName; END -- 添加操作员到作业通知列表 EXEC msdb.dbo.sp_add_jobnotification @job_name = @JobName, @operator_name = @OperatorName, @notification_level_eventlog = @NotifyLevel, -- 写入事件日志的触发级别 @notification_level_email = @NotifyLevel, -- 发送邮件的触发级别 @notification_level_netsend = @NotifyLevel, -- 发送网络消息的触发级别 @notification_level_page = @NotifyLevel; -- 发送寻呼的触发级别 PRINT N'操作员 "%s" 已成功关联到作业 "%s" 的通知列表。', @OperatorName, @JobName;
使用提示
- 替换
@JobName和@OperatorName为你的实际作业与操作员名称 - 调整
@NotifyLevel的值选择通知场景:1:仅作业失败时通知2:仅作业成功时通知4:仅作业完成时通知(无论成败)- 组合值:比如
3(1+2)表示失败和成功都通知,7(1+2+4)表示所有场景都通知
- 脚本会自动校验作业和操作员的存在性,避免无效操作
权限赋予补充
如果需要给操作员开放作业管理权限(如查看、修改、执行作业),可使用以下脚本:
DECLARE @OperatorLogin NVARCHAR(128) = N'操作员对应的登录名'; DECLARE @JobName NVARCHAR(128) = N'目标作业名称'; -- 授予登录名作业访问权限 EXEC msdb.dbo.sp_grant_jobaccess @login_name = @OperatorLogin, @job_name = @JobName; PRINT N'登录名 "%s" 已获得作业 "%s" 的管理权限。', @OperatorLogin, @JobName;
内容的提问来源于stack exchange,提问作者sql100
相关产品推荐
相关产品推荐

