Каков самый простой (и самый быстрый) способ обновить 20K записей данных о сотрудниках из дампа данных CSV на SQL сервере? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть таблица сотрудников с более чем 50 тысячами записей. У нас всего 24 тысячи сотрудников, но некоторые из сотрудников, которых здесь больше нет, связаны с историческими проектами, поэтому я не хочу их удалять. И, конечно же, мы наняли больше сотрудников, которые работают над НОВЫМИ проектами, поэтому их нужно добавить в таблицу сотрудников.

Мне удалось убедить HR предоставить мне файл CSV с данными сотрудников, которые мы сохраните в нашей таблице, и теперь мне нужен способ обновить существующие записи (новые номера телефонов, отделы и т. д. c ...) и добавить новые.

Есть 3 критерия:

  1. если запись существует в CSV и таблице «сотрудников», ОБНОВИТЬ данные;
  2. если запись существует в CSV, а НЕ в таблице «сотрудники», ВСТАВИТЬ данные;
  3. если запись существует в таблице «сотрудники», а НЕ в CSV, установите для записи значение «неактивно».

Это будет обычный (ежемесячный) процесс, поэтому хранимая процедура или Функция будет выполнима.

Предложения, пожалуйста ...

ОБНОВЛЕНИЕ: идея MERGE работает, но решает только 2/3 проблемы (она не соответствует критерию № 3, потому что я не хочу удалить запись, если сотрудник больше не работает Компания). При добавлении второго оператора UPDATE после NOT MATCHED BY SOURCE возвращается ошибка, указывающая, что я не могу обновить одну и ту же запись дважды.

Есть какие-нибудь предложения по поводу этой последней части головоломки?

1 Ответ

1 голос
/ 07 мая 2020

А как насчет использования «слияния»?

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