如何在 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
我的 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