能否在 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)