查找SQL作业中每个作业步骤的“运行方式”值

查找SQL作业中每个作业步骤的“运行方式”值,sql,sql-server-2008,Sql,Sql Server 2008,我正在尝试查找实例中所有作业的每个作业步骤中使用的“运行方式”值。我可以使用下面的查询找到作业的所有者,但不能使用上面的值。请帮忙 USE msdb SELECT * FROM msdb.dbo.sysjobs_view J LEFT JOIN master.dbo.syslogins L ON J.owner_sid = L.sid LEFT JOIN [msdb].[dbo].[syscategories] AS [sCAT] ON j.[category_id] = [s

我正在尝试查找实例中所有作业的每个作业步骤中使用的“运行方式”值。我可以使用下面的查询找到作业的所有者,但不能使用上面的值。请帮忙

USE msdb

SELECT *
FROM msdb.dbo.sysjobs_view J
LEFT JOIN master.dbo.syslogins L
    ON J.owner_sid = L.sid
LEFT JOIN [msdb].[dbo].[syscategories] AS [sCAT]
    ON j.[category_id] = [sCAT].[category_id]
WHERE J.enabled = 1

这是T-SQL形式的答案,受问题下方@Aaron Bertrand的评论启发。特别是,dbo.sysproxies保存ProxyName值

实际上,我不使用select*,而是专门命名要选择的字段。在本例中,我命名为sp.Name以说明运行方式值的显示位置

SELECT sp.NAME AS ProxyName,
    *
FROM dbo.sysjobs_view J
LEFT JOIN sys.syslogins L
    ON J.owner_sid = L.sid
LEFT JOIN dbo.syscategories AS [sCAT]
    ON j.[category_id] = [sCAT].[category_id]
LEFT JOIN dbo.sysproxies sp
    ON l.sid = sp.user_sid
WHERE J.enabled = 1

您是否已将运行方式设置为使用代理帐户?如果是,msdb.dbo.sysjobsteps有一个名为proxy_id的列,该列链接回msdb.dbo.sysproxies。从那里,您可以通过将用户_sid从代理表连接到master.sys.Server_principals.sid来链接到SQL Server登录。此外,您不应该使用不推荐使用的向后兼容性视图,如syslogin。经过一些修改后,它会有所帮助:您需要更具描述性。
 SELECT 
       sysjobsteps.step_name, 
       sysjobs.name 
 FROM sysjobsteps , sysjobs
 WHERE proxy_id = (SELECT proxy_id FROM msdb.dbo.sysproxies WHERE (name = 'ProxyAccountName'))
 AND sysjobs.job_id = sysjobsteps.job_id