2013-04-17 6 views
0

У меня есть две таблицы. user и user_new user содержит старые данные. user_new содержит новые данные. Я хочу синхронизировать user_new с user.Как скопировать или обновить из таблицы в другую таблицу

  1. если существуют данные в user_new и не существует в user, а затем вставить в user.
  2. , если существуют данные в user и user_new, а затем обновить. (Сравните с колонкой id)

что быстрый SQL, чтобы сделать это?

+2

Что вы пытаетесь уже? –

+0

Какая версия сервера sql? – TechDo

+0

@Dozer вы член команды Data Migration? – Luv

ответ

2

Это работает на любой версии сервера -

-- 1) Insert new record 

     INSERT INTO old_table(id, column) 
     SELECT n.id, n.column 
     FROM new_table n 
     LEFT JOIN old_table o ON n.id = o.id 
     WHERE o.id IS NULL 

    -- 2) Update existed record 

     UPDATE o 
     SET column = n.column 
     FROM old_table o 
     JOIN new_table n ON n.id = o.id 
+0

прохладный! ~ Это работает! ~ – Dozer

0

Вы не можете сделать insert и update в одном запросе вы должны сделать в отдельном

select * from user where user_id not in (select user_new.user_id from user_new) 

этого запроса приводит данные для вставки запрос аналогично u необходимо обновить, заменив not in на in

0

Похоже, вам может понадобиться Merge, если у вас есть сервер sql 2008+.

1

С Sql Server 2008 года вы можете использовать синтаксис Merge

MERGE user target 
USING user_new source 
ON taget.ID = source.ID 
WHEN MATCHED THEN 
UPDATE 
SET target.Column= source.Column1,target.column2=source.column2 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (ID,Column1,Column2) 
VALUES (source.ID,source.column1,source.column2); 

или вы можете использовать приведенный ниже запрос

INSERT INTO user(ID,column1,column2) 
SELECT ID,column1,column2 FROM user_new AS source 
WHERE NOT EXISTS (SELECT * FROM user WHERE ID = source.ID); 

UPDATE target SET ... 
FROM user AS target 
INNER JOIN user_new AS source 
ON target.ID = source.ID; 
Смежные вопросы