如何在 SQL 语句中的打开游标内执行条件语句

How to do conditional statement inside of a Open Cursor in a SQL statement

我的 SQL 服务器上有一个每晚运行的存储过程。目的是计算两个日期之间的差值,并将余数放入一列。

我有以下 field:s 截止日期、今天的日期、进度和剩余天数。我计算今天的日期和截止日期之间的差异,并将差异存储在剩余天数列中。

但现在我想检查 Progress 列的值,如果 Progress 是 'Complete' 那么我想跳过剩余天数更新。

这样一来,如果作业完成,剩余天数将不会继续倒计时,因为距离今天的日期越来越远。

这是我目前所知道的。这适用于除对进度列的条件检查之外的所有内容。我不知道如何在我使用的光标内部执行此操作。

DECLARE @due_date DATE 
DECLARE @difference varchar(50) 
DECLARE @id INT

DECLARE myCursor CURSOR FORWARD_ONLY FOR 
    SELECT [Engr Due] FROM dbo.Employee_Table 

OPEN myCursor

FETCH NEXT FROM myCursor INTO @due_date 

WHILE @@FETCH_STATUS = 0 BEGIN 
    SELECT @difference = DATEDIFF(day, GETDATE(), @due_date) 
    UPDATE Employee_Table
        SET [Remaining Days]=@difference 
        WHERE CURRENT OF myCursor 
    FETCH NEXT FROM myCursor INTO @due_date 
END

CLOSE myCursor 
DEALLOCATE myCursor

如果你想继续使用光标,请考虑这是一个开始:

DECLARE @due_date DATE, @difference varchar(50), @id INT, @Now datetime = (Select GetDate());

DECLARE myCursor CURSOR FORWARD_ONLY FOR 
    SELECT [Engr Due], [Progress] 
    FROM dbo.Employee_Table OPEN myCursor

FETCH NEXT FROM myCursor INTO @due_date, @Progress
WHILE @@FETCH_STATUS = 0 
BEGIN 
    if (@Progress != 'Completed')
    BEGIN
        SELECT @difference = DATEDIFF(day, @Now, @due_date) 
        UPDATE Employee_Table
        SET [Remaining Days]=@difference 
        WHERE CURRENT OF myCursor 
    END
    FETCH NEXT FROM myCursor INTO @due_date, @Progress

END

CLOSE myCursor DEALLOCATE myCursor