2016-07-25 27 views
0

假設有在數據庫中的一些記錄是這樣的:檢測一個新的記錄是相同的數據庫中的現有記錄

Id v1 v2 v3
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

而且假設我的新記錄如下所示:
Id v1 v2 v3
1 1 2 1
5 5 5 5

現在,我想插入我的新記錄這樣:
1.檢查如果ID存在於數據庫中;
2.如果不存在,直接插入記錄;
3.如果存在,則檢測記錄是否與新記錄相同。如果不是,只更新更改的值。

由於我的真實數據非常大,包含50多個變量,我想快速插入,所以我想問一下有沒有什麼通用的方法來檢測同一個Id的新記錄是否與現有記錄不同實體框架。我無法做50+ if查看哪些變量已被更改。

請確保您的解決方案適用於大型數據集,謝謝。

+0

的可能的複製[SQL服務器插入,如果不存在(HTTP:/ /stackoverflow.com/questions/20971680/sql-server-insert-if-not-exist) – Danieboy

+2

如果ID已經存在,爲什麼你需要檢查是否有50個字段是不同的?你有一個特定的性能問題,還是你只是過早優化? –

+0

我正要問同樣的問題。 – AVK

回答

0

可以使用MERGE執行 「更新插入」 操作:

MERGE INTO #t AS TGT 
USING (VALUES 
    (1,1,2,1), 
    (5,5,5,5)) AS SRC (Id, v1, v2, v3) 
ON TGT.Id = SRC.Id 
WHEN MATCHED THEN 
    UPDATE SET TGT.v1 = SRC.v1, 
       TGT.v2 = SRC.v2, 
       TGT.v3 = SRC.v3 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (Id, v1, v2, v3) 
    VALUES (SRC.Id, 
      SRC.v1, 
      SRC.v2, 
      SRC.v3); 

Working example

BOL:https://msdn.microsoft.com/en-us/library/bb510625.aspx

+0

謝謝克里斯。我發現'IDbSetExtensions.AddOrUpdate'方法在Entity Framework中的功能與MERGE相同 – zhichi

相關問題