检测新记录是否与数据库

时间:2016-07-25 16:06:59

标签: c# sql-server entity-framework

假设数据库中有一些记录如下:

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来查看哪些变量已被更改。

请确保您的解决方案适用于大型数据集,谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用MERGE执行“upsert”操作:

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