gpt4 book ai didi

sql-server-2008 - 在 SQL Server 中使用合并更新第三个表

转载 作者:行者123 更新时间:2023-12-04 07:19:43 26 4
gpt4 key购买 nike

我有两个表 A 和 B。表 A 是源,B 是目标。根据某些条件,我要么更新 A 中 B 中的现有行(仅限选择性列),要么作为 A 中 B 中的新行插入。A 和 B 具有相同的列。这我可以使用 MERGE 来完成。

现在,如果表 B 中的行被更新,我需要更新第三个表 C 中的一些记录。是否可以在以下语句中执行此操作,

MERGE B
USING A
ON A.somecolumn = B.somecolumn

WHEN MATCHED THEN

UPDATE
SET
B.somecolumn1 = A.somecolumn1,
B.somecolumn2 = A.somecolumn2

WHEN NOT MATCHED BY TARGET THEN
INSERT INTO B
somecolumn1,
somecolumn2,
somecolumn3,
somecolumn4

VALUES
(
A.somecolumn1,
A.somecolumn2,
A.somecolumn3,
A.somecolumn4
);

最佳答案

您需要 output 的临时存储来自使用临时表/表变量的合并语句和更新语句。

-- Your table A, B and C
declare @A table(ID int, Col int)
declare @B table(ID int, Col int)
declare @C table(ID int, Col int)

-- Sample data
insert into @A values (1, 1),(2, 2)
insert into @B values (1, 0)
insert into @C values (1, 0),(2, 0)

-- Table var to store ouput from merge
declare @T table(ID int, Col int, Act varchar(10))

-- Merge A -> B
merge @B as B
using @A as A
on A.ID = B.ID
when not matched then insert (ID, Col) values(A.ID, A.Col)
when matched then update set Col = A.Col
output inserted.ID, inserted.Col, $action into @T;

-- Update C with rows that where updated by merge
update C set
Col = T.Col
from @C as C
inner join @T as T
on C.ID = T.ID and
T.Act = 'UPDATE'
https://data.stackexchange.com/stackoverflow/qt/119724/

关于sql-server-2008 - 在 SQL Server 中使用合并更新第三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337304/

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