Tentando obter o id da sessão dos trabalhos em execução
;with JobDetails as
(
select Job_Id = left(intr1,charindex(':',intr1)-1),
Step = substring(intr1,charindex(':',intr1)+1,charindex(')',intr1)-charindex(':',intr1)-1),
SessionId = spid
from master.dbo.sysprocesses x
cross apply (select replace(x.program_name,'SQLAgent - TSQL JobStep (Job ','')) cs (intr1)
where spid > 50 and x.program_name like 'SQLAgent - TSQL JobStep (Job %'
)
select *
from msdb.dbo.sysjobs j
inner join JobDetails jd on j.job_id = jd.Job_Id
mas dá o seguinte erro
Msg 8169, Level 16, State 2, Line 47 A conversão falhou ao converter de uma cadeia de caracteres para identificador exclusivo.
Eu tentei converter o job_id
para varbinary
, mas não produz resultado
;with JobDetails as
(
select Job_Id = left(intr1,charindex(':',intr1)-1),
Step = substring(intr1,charindex(':',intr1)+1,charindex(')',intr1)-charindex(':',intr1)-1),
SessionId = spid
from master.dbo.sysprocesses x
cross apply (select replace(x.program_name,'SQLAgent - TSQL JobStep (Job ','')) cs (intr1)
where spid > 50 and x.program_name like 'SQLAgent - TSQL JobStep (Job %'
)
select *
from msdb.dbo.sysjobs j
inner join JobDetails jd on cast(j.job_id as varbinary) = jd.Job_Id
mas quando eu copio cole job_id
um cte
assim
select job_id, name
from msdb..sysjobs
where job_id = 0x128A47A31EAB8F4DA1AD852093D815F5
funciona . _ Alguma ideia de como corrigir essa consulta
Eu costumava
CONVERT
converter o msdb.dbo.sysjob.job_id paraBINARY(16)
e depois useiCONVERT
(e um style ) para converter isso em um varchar(max) que poderia ser comparado ao que sai do seu cte. Você pode ler mais sobreCONVERT
estilos e revisando a documentação do CONVERT . Isso funcionou nos meus testes.Tente isto: