繁体   English   中英

用另一个表中的所有记录更新或插入表

[英]update or insert table with all records from another table

我正在将数据从一个数据库表导入到具有不同结构的另一个表中,并且正在使用以下代码:

UPDATE BD1.dbo.Table1 
SET C2=t2.C2 
from BD2.dbo.Table2 as t2 
WHERE c1=t2.c1 collate SQL_Latin1_General_CP1_CI_AI 
IF @@ROWCOUNT=0 INSERT INTO  BD1.dbo.Table1 (c1,c2) 
select t2.c1, t2.c2 From BD2.dbo.Table2 as t2

如果我在BD1和BD2之间没有任何匹配项,则可以正常工作,但是如果我这样做,该命令将仅更新现有字段。 我想更新现有字段并创建新字段(?!)。
我相信问题出在@@ rowcount = 0,但是我有一个where条件,它应该逐条记录地记录,不是吗?

merge语句仅用于此操作。 它称为UPSERT =更新记录(如果存在)或插入(如果不存在)。

由于我没有您的架构,因此无法测试以下代码段。 但是这是一个可能适合您的TSQL示例。

-- UPSERT from staging to production
MERGE INTO 
    BD1.dbo.Table1 AS Target
USING 
    (SELECT C1, C2 FROM BD2.dbo.Table2) AS Source (C1, C2)
ON 
    Target.C1 = Source.C1 collate SQL_Latin1_General_CP1_CI_AI 
WHEN MATCHED THEN
    UPDATE SET Target.C2 = Source.C2
WHEN NOT MATCHED BY TARGET THEN
    INSERT (C1, C2) VALUES (Source.C1, Source.C2)
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM