【发布时间】:2015-06-18 12:08:36
【问题描述】:
我有 2 个表需要更新:
表 A 包括:ID、人名、日期、状态
表 B 包括:PersonID、Date、status
对于 A 中的每一行,B 中可以有多个具有相同 personID 的行
我需要“循环”来自 A 且 status=2 的所有结果,并将日期和状态更新为 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()
我知道如何使用以下 sql 语句更新 B 中的所有行:
UPDATE
B
SET
status = 1,
date = GETDATE()
FROM
B
INNER JOIN
A
ON
B.PersonID = A.ID
问题是我不知道如何更新表 A,因为更新语句中不能有多个表
感谢您的帮助
【问题讨论】:
-
您可以使用
OUTPUT子句更新第一个表来捕获正在更新的记录。然后使用此信息更新第二个表。 -
为什么不简单地写两条更新语句呢?如果您需要全部或全部不需要,您可以将它们放入事务中。
标签: sql sql-server