o SQL Server SAÍDA cláusula retorna os valores de cada linha que foi afetado por um INSERT, UPDATE ou DELETE.
a cláusula de saída devolve uma cópia dos dados que podem ser inseridos numa tabela separada durante a execução da consulta.
esta cláusula é mais comumente usada para acompanhar a mudança de dados na tabela para fins de auditoria.a cláusula de saída
permite o acesso a duas tabelas virtuais, como se indica a seguir.
- inserido que contém as novas linhas (inserir ou actualizar)
- suprimido que contém a cópia antiga das linhas (em branco para inserir)
a cláusula de saída pode aceder a todas as colunas da tabela, mesmo que não façam parte da instrução inserir .
sintaxe
---- for insertINSERT INTO tablename OUTPUT inserted . *INTO @output_tablenameVALUES (col_value1 ,col_value2 ,..) ---for delete DELETE FROM tablenameOUTPUT deleted.* INTO @output_tablename WHERE Condition
CREATE TABLE dbo.Item (ItemId Int identity(1,1),ItemName Varchar(20),ItemPurchasedDate Datetime)
Usando a cláusula Output com a instrução Insert
Para inserir cláusula output resultado em uma tabela , Primeiro, declare uma variável de tabela para armazenar o resultado de cláusula de saída ,e usar a saída caluse sintaxe para armazenar o resultado na variável de tabela .
para aceder aos registos inseridos, a cláusula de saída utiliza a tabela virtual inserida que contém as novas linhas.
Na instrução a seguir, vamos inserir um registro na tabela do Item e usar a cláusula output para armazenar os registros em uma tabela variável @insert_log como dado abaixo
DECLARE @insert_log TABLE(ItemId Int, ItemName Varchar(20), ItemPurchasedDate Datetime )INSERT INTO dbo.Item OUTPUT inserted.ItemId, inserted.ItemName, inserted.ItemPurchasedDateINTO @insert_logVALUES ('Item1' , Getdate()) SELECT * FROM dbo.Item;SELECT * FROM @insert_log ;
Como você pode ver a saída da tabela do Item e variável de tabela, Ao inserir novos registros na tabela do item, ItemId não é parte da instrução insert . No entanto, você pode acessar a coluna ItemId na cláusula de saída.
usando a caluse de saída com a instrução de actualização
para aceder aos registos actualizados, pode utilizar a tabela virtual inserida ou apagada com a cláusula de saída, de acordo com as suas necessidades.
Se quiser aceder a valores antigos antes de actualizar o novo valor, então poderá usar a tabela virtual apagada e se quiser aceder a novos valores actualizados, então poderá usar a tabela virtual inserida com a cláusula de saída.
na seguinte instrução, nós atualizamos o valor do ItemName na tabela de itens e usamos a cláusula de saída para armazenar os valores antigos para esses registros em uma variável de tabela @update_log.
Como queremos acessar registros antigos, então, usamos a tabela virtual apagada.
DECLARE @update_log TABLE( ItemId int, ItemName Varchar(20), ItemPurchasedDate Datetime )UPDATE dbo.Item SET ItemName ='Item2'OUTPUT deleted.ItemId, deleted.ItemName, deleted.ItemPurchasedDateINTO @update_logWHERE ItemId =1SELECT * FROM dbo.Item;SELECT * FROM @update_log
Como você pode ver, temos aqui três de saída da seguinte forma
1: é a tabela de saída antes de atualizar os registros.
2: é a saída da tabela depois de atualizar os registros.
3: é a saída devolvida pela variável da tabela que detém os antigos valores de registros que foi antes da atualização.
Se você quiser acessar novos registros, então você pode usar a tabela virtual inserida no lugar do deletado.
cláusula de saída com a Declaração de supressão
a seguir à declaração usa a consulta de supressão para apagar o registo de ItemId= 1 da tabela de itens e armazenar os registos apagados na variável da tabela usando caluse de saída .
para aceder à cláusula de saída de registos apagados, use a tabela virtual apagada que contém a cópia antiga das linhas.
DECLARE @delete_log TABLE( ItemId Int, ItemName Varchar(20), ItemPurchasedDate Datetime )DELETE FROM dbo.Item OUTPUT deleted.ItemId, deleted.ItemName, deleted.ItemPurchasedDateINTO @delete_logWHERE ItemId =1SELECT * FROM dbo.Item;SELECT * FROM @delete_log
Como você pode ver , não Há dados disponíveis na tabela do Item como ele é excluído, mas de saída cláusula insere excluídos registros em uma tabela variável @delete_log, o que é muito útil para manter o controle dos registros excluídos.
ecomendado para você
SQL Server Temporal Tables
822 total views, 8 views today