简体   繁体   English

如果数据存在则要在数据库中更新 - 否则它应该在 SQL Server 中插入新记录

[英]Data to be updated in database if it exists - else it should insert new records in SQL Server

I have created an insert statement to add data to DB if data not exists.如果数据不存在,我创建了一个插入语句来将数据添加到数据库。

INSERT INTO SampleList(SampleId, Type, Description)
    SELECT nr.SampleId, nr.Type, nr.Description
      FROM (VALUES (1,'A','AA'),
                 (2,'B','BB'),
                 (3,'C','CC'),
                 (4,'D','DD')
           ) AS nr (SampleId,Type,Description) 
      LEFT JOIN SampleList cr ON cr.SampleId = nr.SampleId 
      WHERE cr.SampleId IS NULL

But I want to update the rows as well if data exists in the database.但是如果数据库中存在数据,我也想更新行。

Can you please help me to do so?你能帮我这样做吗?

You can use MERGE :您可以使用MERGE

MERGE SampleList cr 
USING (SELECT nr.SampleId, nr.[Type], nr.[Description] 
       FROM (VALUES (1,'A','AA'), (2,'B','BB'), (3,'C','CC'), (4,'D','DD') 
                  ) as nr (SampleId, [Type], [Description])
      ) AS nr -- Use missed alias
       ON (cr.SampleId = a.SampleId) 
WHEN MATCHED THEN 
     UPDATE SET cr.[Type] = nr.[Type], cr.[Description] = nr.[Description] 
WHEN NOT MATCHED BY TARGET THEN 
     INSERT (SampleId, [Type], [Description]) 
        VALUES (nr.SampleId, nr.[Type], nr.[Description]); -- to terminate the merge

However, you can simplify your subquery with only values :但是,您可以仅使用values来简化子查询:

MERGE SampleList cr 
USING ( VALUES (1,'A','AA'), (2,'B','BB'), (3,'C','CC'), (4,'D','DD') 
      ) AS nr(SampleId, [Type], [Description]) 
      ON (cr.SampleId = a.SampleId)
WHEN MATCHED THEN 
     UPDATE SET cr.[Type] = nr.[Type], cr.[Description] = nr.[Description] 
WHEN NOT MATCHED BY TARGET THEN 
     INSERT (SampleId, [Type], [Description]) 
        VALUES (nr.SampleId, nr.[Type], nr.[Description]); -- to terminate the merge 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM