IDフィールドのあるテーブルがあるとします。レコードがまだ存在しない場合は、レコードを挿入したいと思います。次の例では、@Field1に格納されている値がテーブルにすでに存在するかどうかを確認します。そうでない場合は、新しいレコードを挿入します。
テーブルの定義:
MyTable (MyTableId int Identity not null, Field1 int not null, Field2 int not null)
これは、値がすでに存在するかどうかを確認し、必要に応じて挿入する方法です。
merge MyTable as t
using (@Field1, @Field2) as s (Field1,Field2)
on (t.Field1=s.Field1)
when not matched then
insert (Field1,Field2) values (s.Field1,s.Field2);
レコードがテーブルにまだ存在していなかったときにID値を取得するには、次を追加します。
output Inserted.MyTableId
しかし、レコードがすでにテーブルにある場合(つまり、一致する場合)はどうなりますか?
私が見つけた唯一の方法は、Mergeステートメントを実行した後にテーブルをクエリすることです。
select MyTableId from MyTable where Field1=@Field1
マージから直接ID値を取得する方法はありますか?