Cláusula ‘OUTPUT’ – SQL SERVER
A clausula OUTPUT retorna informações ou expressões baseadas em cada linha afetada por uma instrução INSERT, UPDATE, DELETE ou MERGE. É muito útil para guardar as informações das linhas afetadas.
Vamos ver como ela funciona?
Vamos criar um banco de dados para testes e evitar desastres, criar uma tabela e em seguida popular essa tabela:
CREATE MEUSTESTES;
GO
USE MEUSTESTES;
GO
CREATE TABLE CLIENTE(
ID INT IDENTITY,
NOME VARCHAR(50),
SALARIO NUMERIC(10,2)
);
GO
INSERT INTO CLIENTE
VALUES
('RICARDO',1200.00),
('JOSÉ',1500.00),
('RONALDO',1800.00),
('RENATA',2200.00);
GO
A tabela já está criada e populada, precisamos de uma tabela para inserir as modificações sempre que forem feitas na nossa tabela, e assim vermos como funciona o OUTPUT.
Então criaremos outra tabelas com as mesmas características que a tabela que foi criada acima.
CREATE TABLE ALTERACAO_CLIENTE(
ID INT,
NOME VARCHAR(50),
SALARIO NUMERIC(10,2)
);
Vamos a instrução envolvendo a clausula OUTPUT, observe que existe duas (2) formas de utilizar essa clausula.
Exemplo 1 – Informando os campos a serem gravados:
UPDATE C SET SALARIO = 3000.00
OUTPUT deleted.ID, deleted.NOME, deleted.SALARIO INTO ALTERACAO_CLIENTE
FROM CLIENTE C
WHERE ID = 1
Exemplo 2 – como as tabelas são iguais, selecionando todos os campos com *:
UPDATE C SET SALARIO = 3000.00
OUTPUT deleted.* INTO ALTERACAO_CLIENTE
FROM CLIENTE C
WHERE ID = 1
Observe que a instrução acima, o OUTPUT busca informações da tabela deleted, onde armazena o valor deletado/atualizado na query.
Assim após especificarmos as colunas do OUTPUT, colocamos o INTO para inserir na tabela que criamos os valores de ID, NOME e SALARIO deletados.
SELECT * FROM ALTERACAO_CLIENTE
Agora vamos utilizar variáveis como exemplo e inserir as alterações da tabela, lembrando que para funcionar corretamente, junto com o bloco delete deve ser selecionado o bloco da variável.
DECLARE @CLIENTES_DELETADOS TABLE(
ID INT,
NOME VARCHAR(50),
SALARIO NUMERIC(10,2)
)
DELETE C
OUTPUT deleted.* into @CLIENTES_DELETADOS
FROM CLIENTE C
WHERE ID = 2
SELECT *
FROM @CLIENTES_DELETADOS
Fonte:
http://blog.dbaacademy.com.br/output-sql-server/
https://docs.microsoft.com/pt-br/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-ver15