手動で書く代わりにスクリプトを生成するにはどうすればよいですか
if exists (select ... where id = 1)
insert ...
else
update ...
多くのレコードでそれを行うのは非常に退屈です!
管理スタジオを使用してスクリプト「データのみ」を生成すると、挿入のみが生成されます。そのため、既存のデータベースに対して実行すると、主キーでエラーが発生します。
手動で書く代わりにスクリプトを生成するにはどうすればよいですか
if exists (select ... where id = 1)
insert ...
else
update ...
多くのレコードでそれを行うのは非常に退屈です!
管理スタジオを使用してスクリプト「データのみ」を生成すると、挿入のみが生成されます。そのため、既存のデータベースに対して実行すると、主キーでエラーが発生します。
Merge
SQL 2008以降では、ステートメントと一緒にステートメントの使用を開始できます。CTE
典型的なID/説明ルックアップテーブルの簡単な例
WITH stuffToPopulate(Id, Description)
AS
(
SELECT 1, 'Foo'
UNION SELECT 2, 'Bar'
UNION SELECT 3, 'Baz'
)
MERGE Your.TableName AS target
USING stuffToPopulate as source
ON (target.Id = source.Id)
WHEN MATCHED THEN
UPDATE SET Description=source.Description
WHEN NOT MATCHED THEN
INSERT (Id, Description)
VALUES (source.Id, source.Description);
マージステートメントには、便利な他の機能がたくさんあります(NOT MATCHED BY DESTINATION
、などNOT MATCHED BY SOURCE
)。ドキュメント(上記のリンク)には、さらに多くの情報が記載されています。