Sql-Server

EXCEPT 運算符查詢以區分新行和更改的行

  • October 30, 2018

我正在使用 EXCEPT 運算符比較兩個表之間的數據(作為最終導入的一部分,我想將“今天的數據”與“昨天的數據”進行比較,最後才導入新的和更改的行。)

它(除了)似乎正是我所需要的,但是有誰知道我可以擴展它的方法,以便在生成的數據子集中我能夠區分新行和更改的行?

您可以使用這篇文章中的技術。

--Demo setup
set nocount on
drop table if exists #T1
drop table if exists #T2
Create table #T1 (Id int, OtherData varchar(10))
Create table #T2 (Id int, OtherData varchar(10))

insert into #T1(Id,OtherData) values(1,'NewRow')
insert into #T1(Id,OtherData) values(2,'ChgRowB')

insert into #T2(Id,OtherData) values(2,'ChgRowA')

-----------------------------------------------
--The actual query
-----------------------------------------------

-- NEW
SELECT A.*, 'NEW'  AS 'CHANGE_TYPE'
FROM #T1  A
LEFT JOIN #T2  B ON B.ID = A.ID
WHERE B.ID IS NULL
UNION
-- MODIFIED
SELECT B.*, 'MODIFIED'  AS 'CHANGE_TYPE'
FROM (
       SELECT * FROM #T1 
       EXCEPT
       SELECT * FROM #T2
   ) S1
INNER JOIN #T2  B ON S1.ID = B.ID;

| Id | OtherData | CHANGE_TYPE |
|----|-----------|-------------|
| 1  | NewRow    | NEW         |
| 2  | ChgRowA   | MODIFIED    |

引用自:https://dba.stackexchange.com/questions/212657