Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
Tаrantino
Member

Откуда:
Сообщений: 3767
т.е. в переменную нужно получить значение этого столбца
сейчас использую такую конструкцию после merge :
SELECT @ApplicationID = ISNULL(SCOPE_IDENTITY(), @ApplicationID)
можно ли тоже самое но через OUTPUT в MERGE?
25 ноя 14, 12:37    [16901196]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Можно, только сначала output в таблицу.
25 ноя 14, 12:54    [16901329]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Гавриленко Сергей Алексеевич
Можно, только сначала output в таблицу.
И только для $action = 'INSERT'.
25 ноя 14, 13:01    [16901398]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
Гавриленко Сергей Алексеевич
Можно, только сначала output в таблицу.
И только для $action = 'INSERT'.
Хотя, значение-то поля и при других действиях MERGE существует...
Просто речь шла об аналоге SCOPE_IDENTITY()
25 ноя 14, 13:03    [16901415]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
Mairos
Member

Откуда:
Сообщений: 555
Tаrantino, OUTPUT вернёт и то что "matched" и то что "not matched" ..

create  table tt1 (id int identity, num int) 
go

insert into tt1 (num) values (11),(22), (33)
go

-------
create table tt2 (id int identity, num int) 
go

insert into tt2 (num) values (11),(23), (33)
go
---------------

DECLARE @ident TABLE(
   action nvarchar(10),id int NOT NULL, num int not null
 )

merge into tt1 trg
using (select id,num from tt2) src
on src.num = trg.num 
when matched then 
	update set trg.num = src.num 
when not matched then
	insert (num) values(src.num) 
output  $action,inserted.id, inserted.num into @ident
;

select * from @ident	

select * from tt1
select * from tt2

drop table tt1
drop table tt2
25 ноя 14, 14:33    [16902345]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
Mairos
Member

Откуда:
Сообщений: 555
action id num
INSERT 4 23
UPDATE 1 11
UPDATE 3 33
25 ноя 14, 14:35    [16902366]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Mairos, а так?
create  table tt1 (id int identity, num int) 
go

insert into tt1 (num) values (11),(22), (33)
go

-------
create table tt2 (id int identity, num int) 
go

insert into tt2 (num) values (11),(23), (33)
go
---------------

DECLARE @ident TABLE(
   action nvarchar(10),id int NOT NULL, num int not null
 )


insert @ident(action,id,num)
SELECT act,id,num FROM
(
 merge into tt1 trg
 using (select id,num from tt2) src
 on src.num = trg.num 
 when matched then update set trg.num = src.num 
 when not matched then insert(num) values(src.num) 
 output $action,inserted.id, inserted.num
) m(act,id,num)
WHERE act='INSERT';

select * from @ident	

select * from tt1
select * from tt2

drop table tt1
drop table tt2
25 ноя 14, 14:42    [16902419]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
Mairos
Member

Откуда:
Сообщений: 555
iap, логично.. массаракш!! )))
25 ноя 14, 14:47    [16902446]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Mairos
iap, логично.. массаракш!! )))
Кстати, вместо подзапроса в USING в данном случае проще просто tt2
25 ноя 14, 14:50    [16902474]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
Mairos
Member

Откуда:
Сообщений: 555
iap, +100500 к карме ))))) Полностью согласен )))
25 ноя 14, 14:52    [16902492]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с MERGE. Нужно получить значения столбца IDENTITY после вставки  [new]
Tаrantino
Member

Откуда:
Сообщений: 3767
Коллеги, всем большое спасибо
25 ноя 14, 15:51    [16902965]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить