Использование t-sql MERGE для копирования или создания данных - PullRequest
0 голосов
/ 01 мая 2019

В качестве отправной точки у меня есть данные, как в tblMyTable:

Id   Date
37   01/01/2019

Или у меня может быть:

Id   Date
37   01/01/2019
38   01/01/2018
39   01/01/2018

Я хотел бы скопировать дату из Id = 37 вИдентификаторы 38 и 39, если идентификаторы 38 и 39 существуют.Если идентификаторы 38 и 39 не существуют, я бы хотел вставить запись с идентификатором 38 и идентификатором 39 с датой от = 37.

Так что в конце дня я быхотелось бы иметь:

Id   Date
37   01/01/2019
38   01/01/2019
39   01/01/2019

Независимо от того, находятся ли 38 и 39 в tblMyTable в начале.

В теории, я должен быть в состоянии сделать это с помощью MERGE, но я могуне понять, как будет работать предложение USING.Мне просто нужно разбить это на два утверждения?

Спасибо,

1 Ответ

2 голосов
/ 02 мая 2019

Вы можете использовать MERGE:

with cte AS (
  select a.id, b.date from (
    select 38 id 
    union all
    select 39
  ) a cross join (
    select date from tblMyTable where Id = 37
  ) b
)

merge into tblMyTable t
using cte c on (t.id = c.id)
when not matched by target then
insert (id, date) values (c.id, c.date)
when matched then
update set date = c.date;

См. Демоверсию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...