是否有可能获取访问 SQL 服务器中的数据库的所有作业的列表?

是否有可能获取访问 SQL 服务器中的数据库的所有作业的列表?

能否在 SQL 中获取访问数据库的所有作业的列表?我想不出如何做到这一点。我可以获取所有作业的列表,但无法获取它们访问的数据库。

谢谢

答案1

这将适用于具有指向数据库的 TSQL 作业步骤的代理作业。

USE msdb
SELECT DISTINCT j.name AS JobName
FROM sysjobs j
INNER JOIN sysjobsteps js ON j.job_id=js.job_id
WHERE js.database_name='MyDatabase'

但是,这不会捕获通过代码中的完全限定名称引用访问数据库的情况。它也不会捕获其他情况,例如包引用数据库的 SSIS 作业步骤。

答案2

这是我使用的:

use master
go

select
convert(sysname, rtrim(loginame)) as loginname, db_name(dbid) as dbname, 
hostname, program_name
from
sys.sysprocesses with (nolock)

这将在第二列返回数据库名称。

答案3

您可以使用以下查询,该查询与第一个回复相同,只需进行一处更改即可遍历所有数据库:

USE msdb
SELECT DISTINCT j.name AS JobName, database_name
FROM sysjobs j
INNER JOIN sysjobsteps js ON j.job_id=js.job_id
WHERE js.database_name in (select name from sys.databases)

相关内容