0

私は2つのテーブルを持っています。userには古いデータが含まれていますuser_newuserこれuser_newには新しいデータが含まれます。に同期しuser_newたいuser

  1. データが に存在しuser_new、存在しない場合はuser、 に挿入しuserます。
  2. データがuserとに存在する場合はuser_new、更新します (列 と比較してくださいid) 。

それを行うための高速なSQLは何ですか?

4

4 に答える 4

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
于 2013-04-17T09:09:33.137 に答える
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;
于 2013-04-17T09:14:19.480 に答える
0

あなたはできませんinsertupdate、単一のクエリでは別々に行う必要があります

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

このクエリは、同様に挿入クエリのデータを生成します。置換not inして更新する必要がありますin

于 2013-04-17T09:10:26.467 に答える
0

SQL Server 2008 以降を使用している場合、 Mergeが必要になるようです。

于 2013-04-17T09:12:56.303 に答える