我有一个由非系统管理员用户创建的作业。此作业失败,因为@database_user_name
设置错误"Only a sysadmin can specify '@database_user_name' parameter"
如果我读 BOL,这将在 SQL 2008 R2 中被忽略,我已确认我正在运行它@@version
。
有什么想法吗?
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1,
@step_name = N'Delete From TmpEmployee',
@command = N'Delete From TmpEmployee',
@database_name = @Database, @server = N'',
@database_user_name = N'',
@subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0,
@retry_interval = 1, @output_file_name = N'', @on_success_step_id = 2,
@on_success_action = 4, @on_fail_step_id = 0, @on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
答案1
@database_user_name = N''
从语句中取出参数。创建后,作业所有者将是运行该语句的登录名。
然后您可以运行sp_update_job @owner_login_name='MyLogin'
以更改所有权。这可以sysadmin
由 、 或 中的某人SQLAgentUserRole
的SQLAgentReaderRole
成员SQLAgentOperatorRole
运行msdb
。
或者,将用户添加到上述 msdb 角色之一。