从另一个 table 更新行的存储过程

Stored procedure to update row from another table

重点是更新**(从 0 变为 1)** 名册 table(第 1 周,第 2 周,....第 16 周)来自 MHS 的 John doe 检查时用他的 phone 号码。应用程序table 在创建日期列中捕获签入日期,该日期应等于周日期 table.

中的第 1 周日期

如果 John doe 尝试从 JHS 签到,名册 table 不应更新。 请参阅图片以获得清晰度和详细信息 当前状态:enter image description here 预期结果:enter image description here

花名册table(当前状态)

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

周末 table:

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

花名册Table(签到后的预期结果)

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

应用table

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...

当你想根据另一个 table 的数据更新一个 table 时,这是你可以执行更新语句的方法 table:

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 roster 
    set roster.week = 1
    from apptable a
    left join roster on a.UserPhoneNumber = roster.Participant1phone
    where roster.some_column = getdate();

这是我创建两个 table 仅用于测试目的的演示。然后我测试了更新语句,然后我测试了程序。

DEMO