Sql-Server
EXCEPT 運算符查詢以區分新行和更改的行
我正在使用 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 |