SQL Server-从临时表复制数据
我正在使用暂存表执行验证并插入到live中 假设我有一张桌子PERSONSSQL 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
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命令成功地实现了这一点!