我的SQL服务器上有一个存储过程,每晚运行一次。目的是计算两个日期之间的差异,并将余数放入一列。
我有以下字段:截止日期,今天的日期,进度和剩余天数。我计算今天的日期和截止日期之间的差异,并将差异存储在剩余天数列中。
但现在我想检查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
答案 0 :(得分:1)
如果您想继续使用光标,请将此视为开头:
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