如何在SQL Server中创建自动更新Tasking表Status的存储过程
SQL Server存储过程实现Tasking表Status字段更新
需求规则
根据以下逻辑更新Tasking表的Status字段:
- 当
Rate(%)等于100时,Status设为Completed - 当
Rate(%)不等于100且EndDate早于当前日期时,Status设为Overdue - 其余情况
Status设为Not started
注:对比你提供的预期输出,Task 2的
Status标注为In progress,但按给定规则,该任务Rate(%)=30≠100且EndDate未早于当前日期(假设当前日期为2/19/2024),应归类为Not started。若需要将Rate>0且未过期的任务设为In progress,下文会提供匹配预期输出的调整版代码。
存储过程代码(严格遵循给定规则)
CREATE PROCEDURE UpdateTaskingStatus AS BEGIN SET NOCOUNT ON; UPDATE Tasking SET Status = CASE WHEN [Rate(%)] = 100 THEN 'Completed' WHEN [Rate(%)] <> 100 AND EndDate < CAST(GETDATE() AS DATE) THEN 'Overdue' ELSE 'Not started' END; END;
存储过程代码(匹配预期输出逻辑)
如果要和你给出的预期输出一致,需补充规则:当Rate(%)>0且EndDate不早于当前日期时,Status设为In progress,调整后的代码如下:
CREATE PROCEDURE UpdateTaskingStatus AS BEGIN SET NOCOUNT ON; UPDATE Tasking SET Status = CASE WHEN [Rate(%)] = 100 THEN 'Completed' WHEN [Rate(%)] <> 100 AND EndDate < CAST(GETDATE() AS DATE) THEN 'Overdue' WHEN [Rate(%)] > 0 AND EndDate >= CAST(GETDATE() AS DATE) THEN 'In progress' ELSE 'Not started' END; END;
使用方式
- 执行存储过程:
EXEC UpdateTaskingStatus;
- 验证更新结果:
SELECT [Task Id], [Task Name], [Start Date], [End Date], [Rate(%)], Status FROM Tasking;
内容的提问来源于stack exchange,提问作者Ken John
相关产品推荐
相关产品推荐

