在SQL Server上使用sysjobs和sysjobhistory,我一直在谷歌搜索,但我似乎无法找到这个问题的直接答案.我认为这是因为我试图在WHERE子句中这样做.
因此,基本上尝试选择在其运行的同一天失败的作业(基本上是今天的日期),因为当前代码正在选择所有失败的现有作业.
以下是我的代码:
SELECT DISTINCT
sj.name,
COUNT(sjh.instance_id) AS errors
FROM
msdb..sysjobhistory sjh
JOIN
msdb.dbo.sysjobs sj ON sj.job_id = sjh.job_id
WHERE
name IN ('SQLAgentJob1', 'SQLAgentJob2')
AND sjh.run_status = 1
AND (SELECT CONVERT(DATE, CONVERT(INT, sjh.run_date), 112)) = (SELECT CONVERT(DATE, GETDATE(), 112))
GROUP BY
sj.name
Run Code Online (Sandbox Code Playgroud)
我一直收到错误声明:
消息529,级别16,状态2,行13
不允许从数据类型int到日期的显式转换.
有任何想法吗?
您不必进行所有这些转换,只需将参数(即当前日期)转换为112的未分隔日期格式:
SELECT DISTINCT sj.name, COUNT(sjh.instance_id) AS errors
FROM msdb..sysjobhistory sjh
JOIN msdb.dbo.sysjobs sj ON sj.job_id = sjh.job_id
WHERE name IN ('SQLAgentJob1','SQLAgentJob2')
AND sjh.run_status = 1
AND sjh.run_date= CONVERT(nvarchar(8), GETDATE(), 112)
GROUP BY sj.name
Run Code Online (Sandbox Code Playgroud)
没有整数到日期转换,因为日期没有整数表示.
该run_date列将YYYYMMDD格式存储为整数,可能是为了减少空间消耗(4个字节而不是8个),可能还有其他原因.
要与之进行比较,只需使用创建等效字符串即可CONVERT(nvarchar(8), GETDATE(), 112).从字符串到整数的转换是隐式的
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |