如何获取调用SQL代理作业的用户?

时间:2017-10-26 15:03:30

标签: sql sql-server sql-server-2008 tsql

我正在处理一个需要为启动作业的用户引用“登录名”值的作业步骤。它将作为值传递到表字段中,然后由其他进程引用。

我无法找到系统表中是否存储起始用户名。它必须存储在某处,因为msdb.dbo.sysjobhistory引用中的(作业结果)步骤是:

The job succeeded.  The Job was invoked by User [domain]\[username].  The last step to run was...

我想为我的工作步骤捕获[domain]\[username]值。我知道它可以作为后续工作完成,引用原始文件并进行一些字符串操作,但如果可能的话,我更愿意在同一个工作中完成。

提前致谢!

1 个答案:

答案 0 :(得分:0)

这记录在message表的msdb.dbo.sysjobhistory列中。

您可能也希望对sysjobs表进行一些连接。即。

select 
    j.name as 'JobName',
    run_date,
    run_time,
    msdb.dbo.agent_datetime(run_date, run_time) as 'RunDateTime',
    case 
        when left(h.message,16) = 'Executed as user' 
            then substring(h.message,19,charindex('.',h.message,1) - 18)
        when h.message like '%invoked by%'
            then substring(h.message,charindex('invoked by ',h.message) + 11,charindex('.',substring(h.message,charindex('invoked by ',h.message) + 11,99)) - 1)
        else h.message
    end
From 
    msdb.dbo.sysjobs j 
INNER JOIN 
    msdb.dbo.sysjobhistory h 
    ON j.job_id = h.job_id 
where 
    j.enabled = 1  --Only Enabled Jobs
order by 
    JobName, 
    RunDateTime desc

REF