如何使用单个查询更新多个表

Dar*_*dar 3 sql sql-server

我有2个表需要更新:

表A包括:ID,personName,日期,状态

表B包括:PersonID,日期,状态

对于A中的每一行,B中可以有多行具有相同的personID

我需要"循环"来自状态= 2的A的所有结果,并将日期和状态更新为1.

此外,对于A中status = 2的每一行,我需要更新B中具有相同personID的所有行(即A.ID == B.PersonID) - 我还需要将日期和状态更新为1.

所以基本上,如果我以编程方式(或算法)执行此操作,那就是这样的:

Foreach(var itemA in A)
    If (itemA.status = 2)
        itemA.status to 1
        itemA.date = GetDate()
        foreach(var itemB in B)
            if(itemB.PersonID == itemA.ID && itemB.status != 2 )
                Change itemB.status to 1
                Change itemB.date = GetDate()
Run Code Online (Sandbox Code Playgroud)

我知道如何使用以下sql语句更新B中的所有行:

UPDATE 
   B
SET
   status = 1, 
   date = GETDATE()
FROM
    B
INNER JOIN
    A
ON
  B.PersonID = A.ID
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何更新表A,因为更新语句中不能有多个表

谢谢你的帮助

Gor*_*off 5

以下是使用该output子句的示例:

declare @ids table (id int);

update table1
    set status = 1
    output inserted.id into @ids
    where status = 2;

update table2
    set status = 1,
        date = getdate()
    where personid in (select id from @ids);
Run Code Online (Sandbox Code Playgroud)