1

手動で書く代わりにスクリプトを生成するにはどうすればよいですか

if exists (select ... where id = 1)
insert ...
else
update ...

多くのレコードでそれを行うのは非常に退屈です!

管理スタジオを使用してスクリプト「データのみ」を生成すると、挿入のみが生成されます。そのため、既存のデータベースに対して実行すると、主キーでエラーが発生します。

4

2 に答える 2

3

MergeSQL 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)。ドキュメント(上記のリンク)には、さらに多くの情報が記載されています。

于 2012-05-24T08:04:58.040 に答える