SQL обновляет только новые или измененные записи в таблице - PullRequest
0 голосов
/ 03 ноября 2010

Я не ищу здесь ответа, скорее, толчок в правильном направлении. У меня есть таблица на сервере хранилища данных, содержащая информацию о клиенте, и я хотел бы создать хранимую процедуру / задание, которое обновляет эту таблицу каждую ночь из действующей версии таблицы. Однако записей много, поэтому я не хочу урезать и заново заполнять эти данные каждый раз. Я хотел бы вставить любые новые записи и обновить только те записи, которые изменились ... например, электронная почта клиента изменилась.

Я просто ищу предложения о том, как лучше подойти к этому, чтобы минимизировать нагрузку на систему.

Любая помощь очень ценится!

1 Ответ

3 голосов
/ 03 ноября 2010

Вы не говорите, какой продукт базы данных вы используете. Но некоторые современные разновидности DMBS поддерживают оператор SQL MERGE. Например, Oracle имеет его с 9i , а SQL Server с 2005 . В DB2 версии 9 он есть (не знаю, когда IBM его представила).

Эквивалентом MySQL является ON DUPLICATE KEY UPDATE , что не так универсально.

Если ваша база данных не поддерживает синтаксис, вам необходимо вручную написать оператор UPSERT. Это будет иметь вид

begin
    update your_table
          set col1 = 23
          when pk_col = 42;
exception
    when no_data_found then
        insert into your_table (pk_col, col1)
        values (42, 23);
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...