Sql-Server
SQL作業忽略IF條件
我有一個包含幾個步驟的工作(執行報告資訊),我在最後一步添加了一個查詢。有時由於我無法控制的因素(應用程序問題)而導致作業失敗,並且噹噹前時間在上午 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
.您可能會使用以下內容:
IF CONVERT(TIME,GETDATE()) > '08:45:00'
這是您的表達式返回字元串的進一步證明:
sp_describe_first_result_set N'SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7))'
對我來說,這顯示了 varchar(7) 的輸出。