2

2 セットのテーブルを同期しようとしています。各セットは (ほぼ) 構造が同一で、1 つは Microsoft SQL Server データベース上にあり、もう 1 つは MySQL データベース上にあります。MSSQL には、MySQL データベースへのリンク サーバーがあります。 LNK-SVR

INSERT INTO ... SELECT FROM1つのテーブルのすべてのレコードを削除し、クエリを使用して再度挿入するINSERT...ON DUPLICATE KEY UPDATEか、新しいレコードが作成され、主キー違反が更新されるように、どちらが速いか疑問に思っています

4

1 に答える 1

0

Sql Server 2008 以前では、Merge ステートメントを使用して 2 つのテーブルを同期する必要があります。

次のサンプルを見てください: 実行後、両方のテーブル (@sourceTable と @targetTable) に同一の行があります。

DECLARE @sourceTable TABLE(id INT PRIMARY KEY, somefield VARCHAR(255))

DECLARE @targetTable TABLE(id INT PRIMARY KEY, somefield VARCHAR(255))

INSERT INTO @sourceTable (id, somefield) VALUES(1, 'SourceValue1'),
 (3, 'SourceValue3')

INSERT INTO @targetTable (id, somefield) VALUES(1,
 'TargetValue1'), (2, 'TargetValue2')

SELECT * FROM @sourceTable SELECT * FROM @targetTable

MERGE @targetTable AS target USING @sourceTable AS source
ON target.id = source.id
WHEN MATCHED THEN UPDATE SET somefield = source.somefield
WHEN NOT MATCHED THEN   INSERT (id, somefield) VALUES(id, source.somefield)
WHEN NOT MATCHED BY source THEN DELETE;

SELECT * FROM @sourceTable
SELECT * FROM @targetTable
于 2013-08-19T15:52:48.443 に答える