0
我想從源執行MERGE到目標插入行,如果它們不存在並更新那些。當我這樣做時,我只得到插入...沒有更新。我閱讀這篇文章(http://stackoverflow.com/questions/5015623/merge-query-in-sql-server-2008),這有點讓我感到困惑,但似乎我需要一個重複的來源做到這一點。有人可以解釋爲什麼需要DUPLICATE源代碼?我只是不明白它,尤其是我應該使用哪些鍵(重複的源或常規的) - 也許重複的SourceTable不需要?SQL Server 2008 MERGE與目標無關的表格
這裏我(簡體)sourceTable會:
row userid placervalue placerDt
--- ------- ---------- ----------
1 abc a1 1/1/12
2 xyz b1 1/1/12
3 abc b2 1/20/12
etc.
和我的目標TargetTable是相同的,但目前正與它沒有行。
row userid placerId
--- ------- ----------
(nothing loaded yet)
我想要的是插入不在目標行中的行,以及UPDATE行。
row userid placervalue placerDt
--- ------- ---------- ----------
1 abc a1 1/20/12 *** note change here (row 3 updates row 1)
2 xyz b1 1/1/12
當我運行這段代碼,我只得到插件(也想知道爲什麼)
MERGE TargetTable as t
USING SourceTable as s
ON s.userid = t.usrid AND s.placervalue = t.placervalue
WHEN MATCHED THEN
UPDATE
SET t.placerDt = s.placerDt
WHEN NOT MATCHED THEN
INSERT (
userid
, placerid
, placerDt
) VALUES (
s.userid
, s.placerid
, s.placerDt
);
擴大對迭戈的回答第二次 - 邏輯只適用於執行之前合併,而不是在表中部分數據是在表中的數據您可以創建一個視圖,該視圖只返回最近的有效行(根據您指定的任何標準)以及用作合併源的用途。 – 2012-01-27 16:19:57
我在某處讀到MERGE是一套操作---這是什麼意思?以另一種方式提出這個問題:如果record1是一個INSERT,並且如果record2與record1匹配,那麼SQL Server會看到record1現在在記錄中並且我得到了記錄1的UPDATE?或者我在下一次嘗試合併(因爲它是在整套設備上運行)而獲得更新?我發現的帖子似乎暗示MERGE可以逐行操作。 – user991945 2012-01-27 16:24:49
想像從源複製到目的地的合併,但是如果該行已經存在於目的地中,它將被更新而不是被複制 – Diego 2012-01-27 16:28:35