web-dev-qa-db-ja.com

SQLインポートして既存のレコードを更新しますか?

データベースに、毎月更新されるアイテムのコストを含むテーブルがあります。これらのコストを更新するために、誰かがテーブルをエクスポートし、Excelで魔法をかけ、テーブルをデータベースにインポートして戻します。 MSSQL 2005を実行しており、組み込みのSQL ManagementStudioを使用しています。問題は、テーブルにインポートし直すときに、インポートする前にすべてのレコードを削除する必要があることです。そうしないと、エラーが発生します。理想的な状況は、インポートが主キーを認識してから、重複キーを使用して2番目のレコードを作成しようとするのではなく、レコードを更新してインポートを停止することです。私たちが取得しようとしている動作の最良の例は、 http://sqlmanager.net/en/products/mssql/dataimport/documentation/hs2180.html 更新または挿入の例にあります。組み込みのツールでこのようなことが可能ですか、それともそれを実現するためにサードパーティのソフトウェアを入手する必要がありますか?

4
Kenundrum

SQL Server 2008では、データを新しいテーブルに配置し、既存のテーブルをターゲットとして、新しいテーブルをソースとしてMERGEステートメントを使用できます。

代わりに、それを新しいテーブルに配置し、それを古い方法でソースとして使用することをお勧めします(残念ながら2つの手順を使用します)。

UPDATE t SET col1 = s.col1, col2 = s.col2
FROM targetTable t
   JOIN
   newTable s
    ON s.id = t.id ;

INSERT targetTable (columnlist)
SELECT s.col1, s.col2, ...
FROM sourceTable s
   LEFT JOIN
   targetTable t
    ON s.id = t.id 
WHERE t.id IS NULL;

ID列にも挿入しようとしている場合は、ターゲットテーブルでIDENTITY_INSERTをオンにする必要がある場合があることに注意してください。

2
Rob Farley