gpt4 book ai didi

sql - “合并”样式操作与文字值?

转载 作者:行者123 更新时间:2023-12-04 00:01:11 30 4
gpt4 key购买 nike

我有一张包含学生等级关系的表:

Student   Grade   StartDate   EndDate
1 1 09/01/2009 NULL
2 2 09/01/2010 NULL
2 1 09/01/2009 06/15/2010


我正在尝试编写一个采用 StudentGradeStartDate的存储过程,我希望它


检查以确保这些值不是重复的
如果记录不是重复的,请插入
如果有现有的学生记录,并且有 EndDate = NULL,则使用新记录的 StartDate更新该记录。


例如,如果我调用该过程并传递 1209/01/2010,那么我最终会得到:

Student   Grade   StartDate   EndDate
1 2 09/01/2010 NULL
1 1 09/01/2009 09/01/2010
2 2 09/01/2010 NULL
2 1 09/01/2009 06/15/2010


听起来我可以使用 MERGE,除了我要传递文字值,而且我需要执行多个操作。今天早上我也感到头疼,似乎无法清晰地思考,因此我将重点放在此 MERGE解决方案上。如果有更明显的方法可以执行此操作,请不要害怕指出。

最佳答案

即使传递文字值,也可以使用MERGE。这是您的问题的示例:

CREATE PROCEDURE InsertStudentGrade(@Student INT, @Grade INT, @StartDate DATE)
AS
BEGIN;

MERGE StudentGrade AS tbl
USING (SELECT @Student AS Student, @Grade AS Grade, @StartDate AS StartDate) AS row
ON tbl.Student = Row.Student AND tbl.Grade = row.Grade
WHEN NOT MATCHED THEN
INSERT(Student, Grade, StartDate)
VALUES(row.Student, row.Grade, row.StartDate)
WHEN MATCHED AND tbl.EndDate IS NULL AND tbl.StartDate != row.StartDate THEN
UPDATE SET
tbl.StartDate = row.StartDate;

END;

关于sql - “合并”样式操作与文字值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980669/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com