2017-05-25 116 views
0

我有兩個表在同一個數據庫上是相同的,一個是上傳數據的臨時「保留」表,另一個是存儲永久數據的實時數據表數據。SQL表 - 從表複製到表

原因是這兩個表相互比較,以查看原來的內容和最新更新內容的變化值。

我的問題是,一旦完成比較階段並且用戶提交了上傳,我該如何將數據從臨時表複製到現有表中,在該表中它將插入一個新的記錄現有的表,如果它已經存在於永久表(使用MonthIDyearID),那麼它應該只是UPDATE,以便沒有任何重複。

所以我想通過查看YearIDMonthID是否已經存在於另一個表中來檢查記錄是否存在。請記住,兩個表都是相同的。

下面是一些示例數據:

表1

SpendID Spend MonthNo YearID ChangedBy 
47  1444.19  2  4  12 

表2

SpendID Spend MonthNo YearID ChangedBy  
1  1500.54  2  4  12 

對不起,希望這是很有意義的。

我試過看UPDATEMERGE,但他們似乎工作的主要標識鍵,我不能在這裏使用。

只需要一個外部的意見來幫助這個,因爲我一直在掙扎。

+1

請張貼一些示例數據。 –

+0

如果'MonthID'和'YearID'組合成爲主鍵(主要識別鍵),那麼你可以在MERGE類別中使用這兩列。或者在「INSERT + UPDATE」組合中 –

+0

已更新爲示例數據。 –

回答

0

您可以使用MERGEINSERT + UPDATE組合執行此操作。我更喜歡後者。

-- Add missing records 
INSERT INTO [Table 1] (SpendID, Spend, MonthNo, YearID, ChangedBy) 
SELECT 
    SpendID 
    , Spend 
    , MonthNo 
    , YearID 
    , ChangedBy 
FROM [Table 2] t2 
WHERE NOT EXISTS (SELECT 1 
        FROM [Table 1] t1 
        WHERE t1.MonthNo = t2.MonthNo 
         AND t1.YearID = t2.YearID) 

-- Update existing records 
UPDATE t1 
    SET t1.Spend = t2.Spend 
FROM [Table 1] t1 
    INNER JOIN [Table 2] t2 
     ON t1.MonthNo = t2.MonthNo 
      AND t1.YearID = t2.YearID 

我喜歡這種過度MERGE的原因是因爲MERGE可能會導致在某些情況下的性能問題。網上有很多文章,但我只會發布a link to an article that exposes one problem with MERGE,並且還會涉及一些與MERGE報告問題有關的其他連接項目,at the bottom of the article

+0

謝謝Radu Gheorghiu,我會試試這個,希望我可以把它用於我的目的。 –

2

您可以使用以下命令來SQLITE:delete-delete,insert,select !!!