You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SQL查询获取SQL Server作业名、关联数据库名与服务器名

问题原因

sysjobsteps系统表的database_name字段仅会存储T-SQL类型作业步骤的关联数据库,针对执行XMLA代码的SSAS命令类作业步骤,目标数据库信息直接内嵌在command字段的XML代码中,不会写入database_name字段,这是原查询返回结果不准确的核心原因。

适配查询方案

下面的查询会自动区分作业步骤类型,T-SQL步骤直接取原生database_name值,SSAS类型步骤通过XML解析提取XMLA代码中指定的目标数据库:

SELECT 
    job.job_id,
    job.name AS job_name,
    job.description,
    steps.step_id,
    steps.step_name,
    steps.subsystem AS step_type,
    steps.command,
    steps.server,
    -- 区分步骤类型获取正确的依赖数据库名
    CASE 
        WHEN steps.subsystem = 'TSQL' THEN steps.database_name
        WHEN steps.subsystem = 'ANALYSISCOMMAND' THEN 
            TRY_CAST(steps.command AS XML).value('(//*:DatabaseID/text())[1]', 'sysname')
        ELSE '非T-SQL/SSAS步骤,无关联数据库'
    END AS depend_database_name
FROM msdb.dbo.sysjobs job
INNER JOIN msdb.dbo.sysjobsteps steps ON job.job_id = steps.job_id
WHERE job.enabled = 1;
注意事项
  • 查询中使用了TRY_CAST避免非法XML格式的command内容导致整个查询报错,若解析失败对应depend_database_name会返回NULL,可单独排查这类异常步骤
  • 如果单条XMLA代码中包含多个SSAS数据库的操作,上述查询默认返回第一个匹配的DatabaseID值,多库操作场景可根据需求调整XML解析的节点匹配逻辑
  • 执行查询的账号需要拥有msdb数据库的查询权限

内容的提问来源于stack exchange,提问作者Hari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:57:03