SqlSkull

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.

  1. inserido que contém as novas linhas (inserir ou actualizar)
  2. 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 
vamos olhar para um exemplo , primeiro criamos uma tabela chamada como Item .
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

Related Posts

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *