SqlSkull

SQL Server OUTPUT klausul returnerar värdena för varje rad som påverkades av en infoga, uppdatera eller ta bort uttalanden.

output-satsen returnerar en kopia av data som kan infogas i en separat tabell under utförandet av frågan.

denna klausul används oftast för att hålla reda på dataändring i tabellen för revisionssyfte.

output klausul ger tillgång till två virtuella tabeller som anges nedan.

  1. infogad som innehåller de nya raderna (infoga eller uppdatera)
  2. borttagen som innehåller den gamla kopian av raderna (tom för infoga)

utgångsklausulen kan komma åt alla kolumner i tabellen, även de ingår inte i Infoga uttalande .

SYNTAX

---- for insertINSERT INTO tablename OUTPUT inserted . *INTO @output_tablenameVALUES (col_value1 ,col_value2 ,..) ---for delete DELETE FROM tablenameOUTPUT deleted.* INTO @output_tablename WHERE Condition 
Låt oss titta på ett exempel , först skapar vi en tabell som heter som objekt .
CREATE TABLE dbo.Item (ItemId Int identity(1,1),ItemName Varchar(20),ItemPurchasedDate Datetime)

använda output klausul med Infoga uttalande

för att infoga output klausul resultat i en tabell , först deklarera en tabell variabel för att lagra resultatet av output klausul ,och använda output caluse syntax för att lagra resultatet i tabell variabel .

För att komma åt infogade poster använder output clause infogad virtuell tabell som innehåller de nya raderna.

i följande uttalande sätter vi in en post i Artikeltabell och använder output-klausulen för att lagra dessa poster i en tabellvariabel @insert_log enligt nedan

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 ;

som du kan se utmatningen från objekttabellen och tabellvariabeln, medan du infogar nya poster i objekttabellen, är itemid inte en del av INSERT-satsen . Du kan dock komma åt kolumnen ItemId i utgångsklausulen.

använda Output caluse med Update Statement

för att komma åt uppdaterade poster kan du använda antingen infogad eller borttagen virtuell tabell med output-klausul enligt ditt krav.

Om du vill komma åt ett gammalt värde som var innan du uppdaterade det nya värdet kan du använda borttagen virtuell tabell och om du vill komma åt nya uppdaterade värden kan du använda infogad virtuell tabell med output-klausul.

i följande uttalande uppdaterar vi ItemName-värdet i Artikeltabell och använder output-klausulen för att lagra de gamla värdena för dessa poster i en tabellvariabel @update_log.

eftersom vi vill komma åt gamla poster så använder vi borttaget virtuellt bord.

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

som du kan se, här har vi tre utgångar enligt följande

1: Det är tabellutmatningen innan du uppdaterar posterna.

2: Det är tabellutmatningen efter uppdatering av posterna.

3: Det är utdata som returneras av tabellvariabeln som innehåller de gamla posterna värden som var före uppdatering.

Om du vill komma åt nya poster kan du använda infogad virtuell tabell istället för raderad.

output klausul med Delete Statement

följande uttalande använder delete query för att radera posten för ItemId= 1 från Objekttabellen och lagra de borttagna posterna i tabellvariabel med Output caluse .

för att komma åt borttagna poster output klausul använd borttagen virtuell tabell som innehåller den gamla kopian av raderna.

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

är mycket användbart för att hålla reda på raderade poster.

rekommenderas för dig

SQL Server temporala tabeller

822 totala Visningar, 8 visningar idag

Related Posts

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *