我的工作有几个步骤(运行报告信息),我添加了一个我写到最后一步的查询。有时作业会因为我无法控制的因素(应用程序问题)而失败,并且当当前时间在上午 8:45 之后时,我的查询基本上会自动执行作业(命令在我创建的表中使用游标运行) ,所以 BI团队不需要自己做。我检查了几次,当我在 ssms 上执行它时,它似乎工作正常,但由于某种原因,当它作为作业运行时,它忽略了时间条件,只是执行作业。
查询:
DECLARE @CodeID INT
declare @codecommand nvarchar(100)
DECLARE crsr CURSOR FAST_FORWARD
FOR
SELECT CodeID, CodeCommand
FROM exec_jobs_on_error
ORDER BY codeid asc;
OPEN crsr
FETCH NEXT FROM crsr
INTO @CodeID, @CodeCommand
WHILE @@FETCH_STATUS = 0
begin
BEGIN TRY
if exists (select 'true' where LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7)) > '08:45AM')
begin
EXEC sp_executesql @codeCommand
INSERT INTO the_daily_BI_error_log
VALUES(@CodeID, 'Completed', GETDATE())
end
END TRY
BEGIN CATCH
declare @CodeError nvarchar(100)
SET @CodeError = (SELECT ERROR_MESSAGE())
insert into the_daily_BI_error_log
values(@codeid, @CodeError, GETDATE())
END CATCH
FETCH NEXT FROM crsr
INTO @CodeID, @CodeCommand
end
CLOSE crsr
DEALLOCATE crsr
我在条件写作中遗漏了什么吗?谢谢。
您正在进行字符串比较,而不是时间比较。此外,您返回的字符串不包括前导
0
.您可能会使用如下所示的内容:
这里进一步证明你的表达式返回一个字符串:
对我来说,这显示了 varchar(7) 的输出。