Данные, которые будут обновлены в базе данных, если они существуют, в противном случае они должны вставить новые записи в SQL Server - PullRequest
1 голос
/ 25 февраля 2020

Я создал оператор вставки для добавления данных в БД, если данных не существует.

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

Но я также хочу обновить строки, если в базе данных есть данные.

Не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 25 февраля 2020

Вы можете использовать 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

Однако вы можете упростить свой подзапрос только с 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...