Trabalhando com OUTPUT

Esta cláusula permite recuperar valores de DML (INSERT, UPDATE, DELETE), e inseri-los em tabelas físicas ou temporárias, bem úteis para identificar registros criados/alterados/excluídos durante uma transação.

Exemplo INSERT:

IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Categoria')
	DROP TABLE Categoria

CREATE TABLE Categoria (
	Codigo INT,
	Descricao VARCHAR(90) NOT NULL,
	CONSTRAINT PK_Categoria PRIMARY KEY (Codigo)
);

DECLARE @Categoria TABLE (
	Codigo INT,
	Descricao VARCHAR(90) NOT NULL
)

INSERT INTO Categoria
	OUTPUT inserted.Codigo, inserted.Descricao
	INTO @Categoria
VALUES
	(1, 'Melancia'),
	(2, 'Melão')

SELECT * FROM Categoria

SELECT * FROM @Categoria

OUTPUT INSERT

Exemplo DELETE:

DECLARE @Excluido TABLE (
	Codigo INT,
	Descricao VARCHAR(90) NOT NULL
)

DELETE FROM Categoria
	OUTPUT deleted.Codigo, deleted.Descricao
	INTO @Excluido
WHERE Codigo = 1

SELECT * FROM @Excluido

SELECT * FROM Categoria

OUTPUT DELETE

Exemplo UPDATE:

DECLARE @Alterado TABLE (
	Codigo INT,
	Descricao VARCHAR(90) NOT NULL,
	CodigoAlterado INT,
	DescricaoAlterado VARCHAR(90) NOT NULL
)

UPDATE Categoria
SET Codigo = 1, Descricao = 'Laranja'
	OUTPUT deleted.Codigo, deleted.Descricao, inserted.Codigo, inserted.Descricao
	INTO @Alterado
WHERE Codigo = 2

SELECT * FROM @Alterado

SELECT * FROM Categoria 

OUTPUT UPDATE

Outra utilidade do OUTPUT é recuperar valores de IDENTITY, NEWID, NEWSEQUENTIALID, ao invés de utilizar @@IDENTITY e SCOPE_IDENTITY() que somente retornam valores do último registro gerado.

IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Categoria')
	DROP TABLE Categoria

CREATE TABLE Categoria (
	Codigo INT IDENTITY,
	CodigoGuid UNIQUEIDENTIFIER DEFAULT NEWID(),
	CodigoHash UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
	Descricao VARCHAR(90) NOT NULL,
	CONSTRAINT PK_Categoria PRIMARY KEY (Codigo)
);

DECLARE @Categoria TABLE (
	Codigo INT,
	CodigoGuid UNIQUEIDENTIFIER,
	CodigoHash UNIQUEIDENTIFIER,
	Descricao VARCHAR(90) NOT NULL
)

INSERT INTO Categoria (Descricao)
	OUTPUT inserted.Codigo, inserted.CodigoGuid, inserted.CodigoHash, inserted.Descricao
	INTO @Categoria
VALUES
	('Melancia'),
	('Melão'),
	('Laranja')

SELECT * FROM @Categoria

OUTPUT IDENTITY

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s