SQL Server - 从临时表中复制数据

5
我将使用分阶段表来进行验证并插入到生产环境中。
假设我有一个名为PERSONS的表。
TABLE Persons
(
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
HouseNumber int,
)

并创建一个如下所示的暂存表(STAGING TABLE)

TABLE Persons_Staging
(
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
HouseNumber varchar(255),
)

我需要编写一个程序,将数据从“暂存表”传输到“生产表”,并确保不插入重复数据。我该如何实现?
提前感谢。

1
我已经多年没有手动完成这样的任务了,现在认为这种任务完全没有生产力。这可能不是现在的选择,但从长远来看,考虑获取一个数据库比较工具。这些工具旨在完成所有繁重的工作,让您可以专注于开发工作。我使用Redgate的工具。他们有免费试用版。http://www.red-gate.com - Paul Alan Taylor
2个回答

9
使用MERGE命令。
类似于这样的语句:
MERGE 
    INTO Persons AS TARGET
    USING Persons_Staging AS SOURCE
    ON TARGET.ID = SOURCE.ID
    --WHEN MATCHED
    --    THEN UPDATE???
    WHEN NOT MATCHED BY TARGET
        THEN INSERT (Id , LastName , FirstName, HouseNumber)
    VALUES (SOURCE.Id , SOURCE.LastName , SOURCE.FirstName, SOURCE.HouseNumber)
    -- WHEN NOT MATCHED BY SOURCE
    --    THEN DELETE???
;

如果你想更新现有的记录,你需要取消 UPDATE 部分的注释,并添加合适的更新子句。删除部分也是同样操作。

谢谢,我使用MERGE命令成功地解决了这个问题! - dopplesoldner

0

您可以使用左外连接在两个表上运行,以获取所有不同的数据。然后将这些数据插入到您的列中。

INSERT INTO Tab1(front,end,number)
SELECT first,last,nr from tab2 LEFT OUTER JOIN tab1 ON front = first AND last = end AND convert(int,number) = CONVERT(int,nr)
WHERE tab1.ID is null

这可能可行,但另一方面也有专门用于此类工作的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接