Sql-Server

SQL作業忽略IF條件

  • August 30, 2018

我有一個包含幾個步驟的工作(執行報告資訊),我在最後一步添加了一個查詢。有時由於我無法控制的因素(應用程序問題)而導致作業失敗,並且噹噹前時間在上午 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) 的輸出。

引用自:https://dba.stackexchange.com/questions/216302