Olá... neste post veremos outra novidade no Transact-SQL do SQL Server 2005, a cláusula OUTPUT. Esta cláusula pode ser acrescentada a uma instrução de atualização para retornar os dados que acabaram de ser atualizados. Vamos criar uma tabela no Banco de Dados TEMPDB para utilizar nos exemplos:
use tempdb
go
create table TesteOutput (ColPK int IDENTITY NOT NULL, Nome varchar(50), Tel varchar(20))
Repare que a tabela TesteOutput possui a propriedade IDENTITY (auto numeração) na primeira coluna (ColPK)! Uma necessidade comum é retornar o valor atribuído pelo SQL Server a coluna com propriedade IDENTITY durante um INSERT, sendo necessário executar um SELECT após o INSERT.
insert TesteOutput values ('Ana Lucia','1111-1111')
select SCOPE_IDENTITY()
Valor_ColPK
-------------------
1
O SQL Server 2005 pode simplificar a operação acima em um comando apenas, veja:
insert TesteOutput OUTPUT inserted.ColPK
values ('Maria Clara','2222-2222')
ColPK
-----------
2
Se você quiser pode até retornar todas as colunas da tabela:
insert TesteOutput OUTPUT inserted.*
values ('Ana Paula','3333-3333')
Veja no DELETE:
delete TesteOutput OUTPUT deleted.ColPK,deleted.Nome
where ColPK = 1
Agora um exemplo mais interessante.... você precisa manter uma tabela de auditoria registrando o usuário, operação e a data que ocorreu a atualização! No SQL Server 2000 existem duas opções: TRIGGER ou executar duas operações, veja no SQL 2005:
create table TesteHist (
Nome varchar(50),
Operacao varchar(10),
Data datetime,
Usuario varchar(256))
go
delete TesteOutput OUTPUT
deleted.Nome,'DETELE',getdate(),suser_sname()
into TesteHist
where ColPK = 2
go
select * from TesteHist
Até o próximo post.
Landry.
Nenhum comentário:
Postar um comentário