如何仅将表1的所有行的修改后的列复制到SQL Server 2014中的表2中

时间:2018-08-10 10:02:15

标签: sql-server sql-server-2012 sqlbulkcopy

  1. 我有2个表table1和table2。
  2. 表1最初具有一些数据,表2是具有相同列结构(副本)的空白表。

  3. 我首先将所有数据从表1复制到表2。 现在几天后,外部应用程序在table1中修改了几行几列。

  4. 现在这是我的实际问题开始了 如何在SQL Server中仅将table1的那些已修改列更新为table2。 我对存储过程,批处理作业,SSIS或SQL Server中的任何其他方式开放。

1 个答案:

答案 0 :(得分:0)

请写下这个答案,以便您从中获得启发。

该脚本会将新记录插入到table2中。当业务键上的行匹配但其他属性已更改时,它将根据您的业务键更新第二个表中的行。

MERGE dbo.Client_SCD1 AS DST
USING CarSales.dbo.Client AS SRC
ON (SRC.ID = DST.BusinessKey)
WHEN NOT MATCHED THEN
INSERT (BusinessKey, ClientName, Country, Town, County, Address1, Address2, ClientType, ClientSize)
VALUES (SRC.ID, SRC.ClientName, SRC.Country, SRC.Town, SRC.County, Address1, Address2, ClientType, ClientSize)
WHEN MATCHED 
AND (
 ISNULL(DST.ClientName,'') <> ISNULL(SRC.ClientName,'') 
 OR ISNULL(DST.Country,'') <> ISNULL(SRC.Country,'') 
 OR ISNULL(DST.Town,'') <> ISNULL(SRC.Town,'')
 OR ISNULL(DST.Address1,'') <> ISNULL(SRC.Address1,'')
 OR ISNULL(DST.Address2,'') <> ISNULL(SRC.Address2,'')
 OR ISNULL(DST.ClientType,'') <> ISNULL(SRC.ClientType,'')
 OR ISNULL(DST.ClientSize,'') <> ISNULL(SRC.ClientSize,'')
 )
THEN UPDATE 
SET 
 DST.ClientName = SRC.ClientName 
 ,DST.Country = SRC.Country 
 ,DST.Town = SRC.Town
 ,DST.Address1 = SRC.Address1
 ,DST.Address2 = SRC.Address2
 ,DST.ClientType = SRC.ClientType
 ,DST.ClientSize = SRC.ClientSize
;

在这里寻找SCD type 1-我猜这就是您要搜索的内容