Итак, у вас есть скрипт, который содержит INSERT
операторы, но только новые данные должны быть ВСТАВЛЕНЫ, а обновления должны быть «вставлены».
Немедленный ответ - заменить операторы INSERT на * 1004.* операторы, которые могут быть возможны с использованием sed + awk
, но не видя сценарии и форматы таблиц, которых мы не знаем.
Или другой подход будет к grep
для значений ID
в сценарии,и сгенерируйте для них блок DELETE
s до INSERT
s.
Опять же, без образца кода из вашего скрипта я не могу дать никакого кода о том, как вы это сделаете.
Несколько более сложный подход может быть следующим, предполагая, что ваша таблица называется the_app_table
:
-- CREATE A table based on INSERT target
CREATE TABLE the_temp_table AS SELECT * FROM the_table WHERE 1 = 2;
Теперь соберите файл, чтобы изменить имя цели на временную таблицу:
sed 's/the_target_table/the_temp_table/' the_script.sql > the_new_script.sql
Запустите этот новый скрипт, который вставит данные во временную таблицу.
Запись одного оператора MERGE
в UPSERT с the_temp_table
до the_app_table
.