quarta-feira, 26 de agosto de 2009

Retornar os valores afetados nos Inserts, Updates ou Deletes.

Outra forma mais profissional de se fazer o que foi descrito no post ("Update em Tabela e em variavel ao mesmo tempo.") é utilizando a cláusula OUTPUT do Insert, Update ou Delete.

Ela contém os valores Deleted e Inserted de todas as colunas do update, independente da quantidade de linhas que o Insert, Update ou Delete afetaram:


create table #permanent(id int, d float, comment varchar(15))
go
insert into #permanent values(1, 10., 'Original Row')
insert into #permanent values(2, 10., 'Original Row')
insert into #permanent values(3, 10., 'Original Row')
go


create table #staging(id int, d float)
go
insert into #staging values(2, 15.)
insert into #staging values(3, 15.)
insert into #staging values(4, 15.)
go


declare @updated_ids table(id int, d float, commentAnt varchar(15), commentNew varChar(15))

update #permanent
set d = s.d, comment = 'Modified Row'
output inserted.id, inserted.d, deleted.comment, inserted.comment into @updated_ids
from #permanent p, #staging s
where p.id=s.id


Select *
From @updated_ids


Drop Table #staging
Drop Table #permanent

Nenhum comentário:

Postar um comentário