Вставьте, если не существует, обновите, затем установите флаг для старых записей. - PullRequest
0 голосов
/ 21 ноября 2019

Может кто-нибудь предложить лучший метод или сохраненный процесс, который позволяет обновлять каталог.

Скажем, мы получаем новый список адвокатов для камер каждые 2 месяца. Нам нужно

  1. Вставить новые записи там, где их еще нет - на основе имени, фамилии
  2. Если они существуют, обновить некоторые поля, которые могут быть пустыми, например, номер телефона
  3. Установите для любого, которого нет в списке, значение Live = 'N'

Как правило, получение списков в Excel или по электронной почте, поэтому необходимо очистить данные.

select top 0 * into #temp from *table* 

Insert new data #temp

If not exists (select * from *table* where forename = 'X' and surname = 'Y' and ChambersID = 12) Insert into *table* (Title, forename, surname, yearofcall, ChambersID) values ('Mr','X', 'Y', 2018, 35) else update *table* set yearofcall = 2018 where forename = 'x' and surname = 'Y' and ChambersID = 12

This seems to work. Then i do another query. 

If not exists (select * from #temp where ChambersID = 12) update *table* set live = 'N' where ChambersID = 35

но затянуто долго, так как приходится создавать половину запроса в excel ... гораздо предпочтительнее хранимый процесс, в котором я могу передать имя, фамилию и chambersid

1 Ответ

1 голос
/ 21 ноября 2019

Пожалуйста, попробуйте Merge в SQL. Это соответствует вашим требованиям. Вот фрагмент

MERGE target_table USING source_table
ON merge_condition
WHEN MATCHED
    THEN update_statement
WHEN NOT MATCHED
    THEN insert_statement
WHEN NOT MATCHED BY SOURCE
    THEN DELETE;              --Instead of delete, set Live='N' in your case
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...