BULKINSERTを使用してSQLデータベースにインポートするCSVファイルを毎週受け取ります。一時テーブルに挿入してから、新しいレコードを挿入し、変更されたレコードを更新することで、メインテーブルとマージします。コードは次のとおりです。
BULK INSERT dbo.temp
FROM 'C:\Users\Administrator\Documents\20120125.csv'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' );
MERGE dbo.main AS TargetTable
USING dbo.temp AS SourceTable
ON (TargetTable.name = SourceTable.name)
WHEN NOT MATCHED BY TARGET
THEN INSERT (name, age, gender, father, mother, teacher, mathsrating, historyrating, sciencerating, englishrating)
VALUES(SourceTable.name, SourceTable.age, SourceTable.gender, SourceTable.father, SourceTable.mother, SourceTable.teacher, SourceTable.mathsrating, SourceTable.historyrating, SourceTable.sciencerating, SourceTable.englishrating)
WHEN MATCHED
THEN UPDATE SET
TargetTable.name = SourceTable.name,
TargetTable.age = SourceTable.age,
TargetTable.gender = SourceTable.gender,
TargetTable.father = SourceTable.father,
TargetTable.mother = SourceTable.mother,
TargetTable.teacher = SourceTable.teacher,
TargetTable.mathsrating = SourceTable.mathsrating,
TargetTable.historyrating = SourceTable.historyrating,
TargetTable.sciencerating = SourceTable.sciencerating,
TargetTable.englishrating = SourceTable.englishrating;
DELETE FROM dbo.temp
私が達成したいのは、更新によって上書きされたレコードを「以前の」値とともに新しいテーブルに格納して、変更された内容の履歴を保持することです。私はSQLにかなり慣れていませんが、少し調べてみると、トリガーが取るべきアプローチかもしれないようですが、これにアプローチする方法についての提案を歓迎します。
ありがとう
マット