Если вы в состоянии сделать оптовую замену всех четырех таблиц, то ваша самая быстрая стратегия состоит в том, чтобы удалить все строки из всех четырех таблиц и вставить заново, вместо того, чтобы делать "Upsert" (хороший термин @marc_s). Есть одна рекомендация: я бы порекомендовал использовать TRUNCATE для очистки ваших таблиц, а не DELETE. Это работает намного лучше, потому что движок избегает записи всех этих удаленных записей в журнал транзакций. Очевидно, что вам сначала нужно удалить свои «дополнительные» таблицы, те, которые имеют FK для других таблиц.
Если вы обнаружите, что таблицы имеют циклические ссылки, которые затрудняют удаление строк из таблиц, то вот что я бы сделал:
- Снимите все ограничения со своих таблиц
- Усечение ваших целевых таблиц (последовательность не имеет значения, так как ваши ограничения исчезли)
- Импорт данных (используйте bcp, если вы можете для быстрой загрузки!)
- Повторно применить ограничения
- (Необязательно) Обновить статистику по целевым таблицам