我使用以下命令找出作业步骤中使用的脚本。要求:
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'。参数名称在每个作业中都是常量。
假设参数名称在每个作业中都是常量。这应该这样做:
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;
这将返回以下内容: