次のテーブルがあります:
DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 2 12321
2012-05-21 3 32
tmp_holding_DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 4 87
2012-05-21 5 234
DateStamp
およびはItemId
主キー列です。
私は、1 日を通して定期的に実行される挿入を実行しています (ストアド プロシージャ内)。
insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
これにより、保持テーブル ( tmp_holding_DataValue
) のデータがメイン データ テーブル ( DataValue
) に移動します。その後、保持テーブルは切り捨てられます。
問題は、例のように、保持テーブルにメイン テーブルにすでに存在する項目が含まれている可能性があることです。キーは重複する値を許可しないため、手順は失敗します。
1 つのオプションとしては、挿入プロシージャに where 句を配置することですが、メイン データ テーブルには 1,000 万行以上あり、これには長い時間がかかる可能性があります。
挿入時に重複をスキップ/無視する手順を実行する他の方法はありますか?
ベストアンサー1
INSERT dbo.DataValue(DateStamp, ItemId, Value)
SELECT DateStamp, ItemId, Value
FROM dbo.tmp_holding_DataValue AS t
WHERE NOT EXISTS (SELECT 1 FROM dbo.DataValue AS d
WHERE DateStamp = t.DateStamp
AND ItemId = t.ItemId);