1

別のデータベースの別のテーブルの情報を参照として使用して、欠落している行が追加され、最新ではない行が更新されるように、テーブルを更新しようとしています。

ただし、一部のテーブルには主キーがあり、一部にはありません。主キーがある場合、挿入コマンドは実行されず、主キーがない場合、行が複製されます。

挿入コマンドに、すでに存在する主キー値をスキップさせる方法はありますか?

SQL Server Management Studio 2005を使用しています。これまでに、主キー(PKcolumn)を持つテーブルのコードを示します。

INSERT [testDB].[dbo].[table1]
SELECT * FROM [sourceDB].[dbo].[table1]

UPDATE test
SET 
 test.[PKcolumn] = source.[PKcolumn]
,test.[column2] = source.[column2]
,test.[column3] = source.[column3] 
FROM 
[sourceDB].[dbo].[sourceDB] AS source
INNER JOIN 
[testDB].[dbo].[PKcolumn] AS test
ON source.[PKcolumn] = test.[PKcolumn]

更新は完全に機能しますが、重複が1つでもある場合、挿入はまったく実行されません。

このコードを機能させる方法について何か提案はありますか?

また、主キーなしでテーブルで同じことを行うためのヒントはありますか?

4

1 に答える 1

2

LEFT OUTER JOINを使用して、INSERTクエリでテーブルにすでに存在する行を除外する必要があります。

INSERT [testDB].[dbo].[table1]
SELECT * FROM [sourceDB].[dbo].[table1]
LEFT OUTER JOIN [testDB].[dbo].[table1] ON [sourceDB].[dbo].[table1].[PKcolumn] = [testDB].[dbo].[table1].[PKcolumn]
WHERE [testDB].[dbo].[table1].[PKcolumn] IS NULL

主キーのないテーブルの場合、重複を避けるためにすべての列で結合する必要があると思います。

于 2012-07-31T15:57:05.260 に答える