我使用new操作符来比较两个表之间的数据(作为最终导入的一部分,我希望将“今天的数据”与“昨天的数据”进行比较,最后只导入新的和更改过的行)。
它(除了)似乎正是我所需要的,但是有人知道我可以如何扩展它,以便在结果数据子集中,我能够区分新行和更改行吗?
发布于 2018-07-19 14:49:26
您可以使用这个职位的技术。
--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
复制相似问题