2016-03-21 42 views
0

下面的問題讓我佔用。關於查找和衝壓三角洲。SQL Server:比較2個數據加載,然後使用增量加戳

我在dbo.persoon表中有兩個數據加載完全相同的100行,分別用load1和load2標記。我在這200條記錄中做了3列更改,以確保有delta。如果我運行select...except...select部分,那麼這些三角洲會顯示出來。

接下來我想通過使用update語句來標記這些delta的行。但是,當我運行更新代碼時,會出現一個消息,顯示200行。有誰知道如何解決這個問題,只更新三角洲的行?

update dbo.persoon 
set Marking_Field='10' 
where exists 
    (select [ID_person],[NM_firstname] from dbo.persoon where load_date='load1' 
    except 
    select [ID_person],[NM_firstname] from dbo.persoon where load_date='load2') 
+0

聽起來像是不錯的情況下使用MERGE – UnhandledExcepSean

+0

@Ghost合併是一個upserts,在這種情況下,OP只想更新正確的行。正確的JOIN將完成這項工作。 –

+1

@mgo如果子查詢包含任何行,您的查詢將更新'person'中的每一行。由於UPDATE的'person'和子查詢之間存在連接,這意味着所有行都將被更新。 –

回答

0

爲什麼慣於這項工作...

with cte 
as 
(
select [ID_person],[NM_firstname] from dbo.persoon where load_date='load1' 
    except 
    select [ID_person],[NM_firstname] from dbo.persoon where load_date='load2' 
) 
update cte 
set Marking_Field='10' 
+0

謝謝你將盡快嘗試 – mgo

+0

,但它仍會更新所有200行。所以可能是Panagiotis是正確的。 – mgo