SQL Server-从临时表复制数据

SQL Server-从临时表复制数据,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我正在使用暂存表执行验证并插入到live中 假设我有一张桌子PERSONS TABLE Persons ( Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), HouseNumber int, ) 以及如下所示的分段表 TABLE Persons_Staging ( Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(2

我正在使用暂存表执行验证并插入到live中

假设我有一张桌子PERSONS

TABLE Persons
(
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
HouseNumber int,
)
以及如下所示的分段表

TABLE Persons_Staging
(
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
HouseNumber varchar(255),
)
我需要编写一个过程,将数据从暂存表传输到活动表,同时确保不插入重复项。我怎样才能做到这一点

提前感谢

使用该命令

大概是这样的:

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
部分,并添加合适的update子句。删除部分也一样。

您可以将其与两个表上的左外部联接一起使用,以获取所有不相同的数据。然后可以将这些数据插入到列中

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

这可能行得通,但另一方面,有一些工具是为这类东西设计的

我已经好几年没有手动做过类似的事情了,我开始认为这类任务完全没有效率。这可能不是目前的选择,但长期来看,考虑得到一个数据库比较工具。这些设计用于完成所有繁重的工作,让您可以自由地专注于开发工作。我使用Redgate的工具。他们有免费试用。谢谢,我使用MERGE命令成功地实现了这一点!