如何从一个表复制或更新到另一个表

时间:2013-04-17 09:04:25

标签: sql sql-server

我有两张桌子。 useruser_new user包含旧数据。 user_new包含新数据。 我想将user_new同步到user

  1. 如果数据存在user_newuser中不存在,则插入user
  2. 如果数据存在于useruser_new中,则更新。(与列id进行比较)
  3. 什么是快速的SQL来做它?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

答案 2 :(得分:0)

您无法在单独的查询中执行insertupdate

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

此查询会生成插入查询的数据,同样您必须将not in替换为in

进行更新

答案 3 :(得分:0)

如果你有sql server 2008 +。

,听起来你可能需要一个Merge