存储过程以更新另一个表中的行

问题描述

关键是要更新MHS的John doe的电话簿表(从0更改为1)**(从第1周,第2周,第16周)。该应用程序会在创建日期列中捕获签入日期,该日期应等于星期日期表中第1周的日期。

如果John doe应尝试从JHS检入,则名册表不应更新。 参见图片以获得清晰度和细节 当前状态:enter image description here 预期结果:enter image description here

名单表(当前状态)

UID   Name      School   Participant1phone   Participant2phone   Week1   Week2 
1     John Doe  MHS      8324444444          8325555555          0       0 
2     Nia Long  JHS      6785555555          6784444444          0       0

工作日表:

SchoolUID School  Week1      Week2 
1         MHS     9/7/2020   9/14/2020 
2         JHS     9/8/2020   9/15/2020

名册表(签到后预期结果)

UID Name        School  Participant1phone   Participant2phone   Week1   Week2
1   John Doe    MHS     8324444444          8325555555          1       1
2   Nia Long    JHS     6785555555          6784444444          1       1

应用表

ID  Userphonenumber     Created on
1   8324444444          9/7/2020
2   6785555555          9/15/2020

这是到目前为止的SQL查询

create procedure updtroster 
AS
begin
    update roster 
    set roster.week = 1
    from apptable a
    left join roster on a.UserPhoneNumber = roster.Participant1phone
end;

解决方法

也许我错了,但是我已经假设您正在使用SQLServer ...

当您要基于另一个表中的数据来更新一个表时,可以使用以下方法执行更新语句:

update roster 
set roster.week = 1
from apptable a
left join roster on a.UserPhoneNumber = roster.Participant1phone;

有了它,那么很容易将其放在过程中:

create procedure updtroster 
AS
begin
    update roster 
    set roster.week = 1
    from apptable a
    left join roster on a.UserPhoneNumber = roster.Participant1phone;
end;

如您所见,我仅添加了我从您的问题中了解的联接条件。如果需要,您也可以添加其他条件。您可以将其放在where子句中,然后update语句将如下所示:

    update roster 
    set roster.week = 1
    from apptable a
    left join roster on a.UserPhoneNumber = roster.Participant1phone
    where roster.some_column = getdate();

这是演示,其中我创建了两个表以供测试。然后,我测试了更新语句,然后测试了过程。

DEMO