2

SQL Server でマージ句を使用すると、行が使用できない場合に行を挿入する必要があります。これは私が試したことです:

 drop table test;
create table test (col1 int, col2 varchar(20));
insert into test values(1, 'aaa');
insert into test values(2, 'bbb');
insert into test values(3, 'ccc');
--insert into test values(4, 'eee');

merge test as target
using (SELECT * from test where col1=4) as source
on (target.col1 = source.col1)
when matched then
    update set target.col2='ddd'
when not matched by target then
    insert values (4, 'ddd');

これは、一致すると更新されますが、挿入に失敗します。2 つの質問があります。

  1. 上記の場合、一致しない場合に挿入する方法はありますか?

  2. 一致しない条件をカスタマイズしてエラーを発生させることはできますか?

ありがとう。

4

1 に答える 1

3

マージは機能します。ソース ( SELECT * from test where col1=4) が空であることだけです。そのような行はありません。

このハックを使用してエラーを発生させることができます。例えば:

when not matched by target then
insert values (0/0 /*ASSERT*/, NULL);
于 2015-05-27T23:26:00.767 に答える