Скажем, у меня есть таблица с полем идентификации. Я хочу вставить в него запись, если она еще не существует. В приведенном ниже примере я проверяю, существует ли в таблице значение, хранящееся в @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);
Получение значения идентификатора, когда запись еще не существует в таблице, может быть выполнена путем добавления:
output Inserted.MyTableId
но что, если запись уже была в таблице (т.е. если была совпадение)?
Единственный способ, которым я нашел, - запросить таблицу после выполнения оператора Merge:
select MyTableId from MyTable where [email protected]
Есть ли способ получить значение идентичности непосредственно из Merge?