如何从SQL Server中的作业中查找特定参数值

问题描述 投票:0回答:1

我使用以下命令找出作业步骤中使用的脚本。要求:

SELECT SUBSTRING(command, 44, 13),
       command
FROM msdb.dbo.sysjobsteps
WHERE command LIKE '%--Should provide the default location%';

在工作中我想找到具体的参数值。让我们假设在工作步骤中我有一个如下命令

exec sp_backup @ backuplocation ='c:\ temp \',@ overwrite ='Y'...

在上面的命令中,我想要@backuplocation参数详细信息,即'C:\ Temp'。参数名称在每个作业中都是常量。

tsql sql-server-2012 sql-server-2008-r2
1个回答
0
投票

假设参数名称在每个作业中都是常量。这应该这样做:

SELECT F1.command,
       O.splitdata
FROM
(
    SELECT *,
           CAST('<X>'+REPLACE(SUBSTRING(F.command, PATINDEX('%@backuplocation%', F.command), LEN(F.command)), ',', '</X><X>')+'</X>' AS XML) AS xmlfilter
    FROM msdb.dbo.sysjobsteps F
    WHERE command LIKE '%--Should provide the default location%'
) F1
CROSS APPLY
(
    SELECT fdata.D.value('.', 'varchar(100)') AS splitdata
    FROM f1.xmlfilter.nodes('X') AS fdata(D)
) O;

例如,如果我在我的机器上对我们的服务器运行它:

SELECT F1.command,
       O.splitdata
FROM
(
    SELECT *,
           CAST('<X>'+REPLACE(SUBSTRING(F.command, PATINDEX('%@db_nm%', F.command), LEN(F.command)), ',', '</X><X>')+'</X>' AS XML) AS xmlfilter
    FROM msdb.dbo.sysjobsteps F 
    WHERE F.command like 'exec dba..mnt_sts     @db_nm=''msdb'', @sts_object_recompile_fg=         0'
) F1
CROSS APPLY
(
    SELECT fdata.D.value('.', 'varchar(100)') AS splitdata
    FROM f1.xmlfilter.nodes('X') AS fdata(D)
) O; 

这将返回以下内容:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.