quinta-feira, 18 de fevereiro de 2010

Usando o comando OUTPUT

Introduzido no SQL Server 2005 a cláusula OUTPUT pode ser usada em conjunto com os comandos UPDATE, DELETE ou INSERT com facilidade. Isso é feito através do comando OUTPUT que pode acessar as tabelas temporárias, que até o SQL 2000 estavam disponíveis apenas em triggers.
Por este motivo, esta implementação pode ser particularmente útil para substituir triggers que tem como objetivo logs e auditorias. Tenho encontrado muita utilidade para estes comandos em suportes ou deploys de aplicações, seja para determinar se um certo script está realizando assertivamente a sua finalidade.
Veja o exemplo abaixo:
--criando uma tabela de teste
create table teste_output(
  codigo int identity(1,1),
  nome varchar(100),
  origem varchar(100)
      default 'Aplicação'
)
go

--criando uma temp, poderia ser uma física
create table #tmp_teste(
  codigo int,
  nome varchar(100),
  origem varchar(100)
)
go

--inserindo os dados. veja o uso da cláusula output referenciando a tabela virtual inserted
insert into teste_output(nome) output inserted.codigo,inserted.nome,'Output inserted - insert' into #tmp_teste(codigo,nome,origem) values ('Rodrigo')
insert into teste_output(nome) output inserted.codigo,inserted.nome,'Output inserted - insert' into #tmp_teste(codigo,nome,origem) values ('Daniel')
insert into teste_output(nome) output inserted.codigo,inserted.nome,'Output inserted - insert' into #tmp_teste(codigo,nome,origem) values ('Evelise')

--atualizando
update teste_output set origem='Update'
output inserted.codigo,inserted.nome,'Output inserted - update' into #tmp_teste(codigo,nome,origem)


--deletando
delete from teste_output
output deleted.codigo,deleted.nome,'Output deleted - delete' into #tmp_teste(codigo,nome,origem)


--mostrando os resultados
select * from #tmp_teste

--excluindo os objetos
drop table #tmp_teste
drop table teste_output

Nenhum comentário:

Postar um comentário

Leave your comment here!