首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sp_update_schedule说@schedule_id不存在

sp_update_schedule说@schedule_id不存在
EN

Database Administration用户
提问于 2020-10-06 12:53:29
回答 1查看 948关注 0票数 0

我编写了一个脚本,从msdb.dbo.sysschedules读取作业计划,并运行sp_update_schedule来更改给定作业子集的active_start_time。在每种情况下,sp_update_schedule都会失败,因为消息“指定的@schedule_id('xxx')不存在”。(MessageID 14262,严重程度16)

schedule id in sysschedules不是它想要的吗?我在这里错过了什么?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-10-06 13:21:38

@schedule_id参数在sp_update_schedule上确实引用了msdb.dbo.sysschedules上的schedule_id

sp_update_schedule包含对sp_verify_schedule_identifiers的调用以验证计划,从这个验证步骤您将得到该错误(消息14262)。

代码语言:javascript
复制
EXECUTE @retval = msdb.dbo.sp_verify_schedule_identifiers 
          @name_of_name_parameter = '@name',  
          @name_of_id_parameter   = '@schedule_id',  
          @schedule_name          = @name             OUTPUT,  
          @schedule_id            = @schedule_id      OUTPUT,  
          @owner_sid              = @cur_owner_sid    OUTPUT,  
          @orig_server_id         = NULL  

如果您同时传递一个计划id和一个计划名称,则您要传递的名称字符串可能会出现问题,因为它用于验证过程中的其他筛选。

我建议直接调用sp_verify_schedule_identifiers进行一些测试,以便简化故障排除,并确保将有效的参数传递给sp_update_schedule

代码语言:javascript
复制
DECLARE  
  @name_of_name_parameter   VARCHAR(60) ,--= '@schedule_name',
  @name_of_id_parameter     VARCHAR(60) = '@schedule_id',
  @schedule_name            sysname     ,--= 'syspolicy_purge_history_schedule',  
  @schedule_id              INT         = 8,  
  @owner_sid                VARBINARY(85),  
  @orig_server_id           INT,  
  @job_id_filter            UNIQUEIDENTIFIER    = NULL,
  @RetCode                  INT;

EXEC @RetCode = sp_verify_schedule_identifiers 
  @name_of_name_parameter    = @name_of_name_parameter,
  @name_of_id_parameter      = @name_of_id_parameter,  
  @schedule_name             = @schedule_name,    
  @schedule_id               = @schedule_id,           
  @owner_sid                 = @owner_sid,             
  @orig_server_id            = @orig_server_id,
  @job_id_filter             = @job_id_filter;

SELECT  
   RetCode              = @RetCode,
   NameOfNameParam      = @name_of_name_parameter, 
   NameOfIdParam        = @name_of_id_parameter,  
   ScheduleName         = @schedule_name,    
   ScheduleID           = @schedule_id,
   OwnerSid             = @owner_sid,
   OrigServerID         = @orig_server_id,
   JobIDFilter          = @job_id_filter;     

权限也可能会妨碍您的方式。您至少需要GRANT EXEC ON sp_update_schedule TO <your login>才能打您想打的电话。要执行上面列出的故障排除步骤,还需要授予EXEC on sp_verify_schedule_identifiers--尽管只有在直接执行它时才需要这样做。通常,所有权链将允许您只需要顶级权限&您将隐式地拥有执行该过程所需的权限。还可以将您添加到msdb中的SQLAgentUserRole安全角色中,该角色还包括其他权限--如果您正在重新安排作业,您可能还需要/需要一些其他权限来完成您的工作,前提是这是一个可接受的访问级别。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/276609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档