如何仅将 table 1 的所有行的已修改列复制到 sql 服务器 2014 中的 table 2

How to copy only modified columns for all rows of table 1 into table 2 in sql server 2014

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

  3. 一开始我已经把table1的所有数据复制到table2了。 现在几天后,外部应用程序在 table1 中修改了一些几行的列。

  4. 现在我的实际问题开始了 如何仅将 table1 的修改列更新到 sql 服务器中的 table2。 我对 sql 服务器中的存储过程、批处理作业、SSIS 或任何其他方式开放。

我会写一个答案,这样您就可以从中获得灵感。

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

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 - 我猜这就是您要搜索的内容