SQL Server-TULOSTUSLAUSEKE palauttaa jokaisen rivin arvot, joihin insertti, päivitys tai poisto vaikuttivat.
Tulostuslauseke palauttaa kopion tiedoista, jotka voidaan lisätä erilliseen taulukkoon kyselyn suorittamisen aikana.
tätä lauseketta käytetään yleisimmin pitämään kirjaa tietojen muutoksista taulukossa tilintarkastusta varten.
TULOSTUSLAUSEKE antaa pääsyn kahteen virtuaalitaulukkoon kuten alla on esitetty.
- Lisätty, joka sisältää uudet rivit (Lisää tai päivitä)
- poistettu, joka sisältää vanhan kopion riveistä (tyhjä lisää varten)
TULOSTUSLAUSEKE voi käyttää kaikkia taulukon sarakkeita, nekään eivät kuulu Insert-lausekkeeseen .
syntaksi
---- 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)
käyttämällä Ulostulolauseketta , jossa lisätään lauseke
, lisätäksesi tulostuslausekkeen tuloksen taulukkoon, ilmoita ensin taulukkomuuttuja tallentaaksesi tulostuslausekkeen tuloksen ja tallenna tulos tulostuslausekkeen syntaksilla taulukkomuuttujaan .
lisättyjen tietueiden avaamiseen Tulostuslauseke käyttää lisättyä virtuaalitaulukkoa, joka sisältää uudet rivit.
seuraavassa lauseessa lisätään yksi tietue Kohdetaulukkoon ja käytetään tulostuslauseketta tallentamaan nämä tietueet taulukkomuuttujaksi @insert_log kuten alla on annettu
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 ;
kuten näet nimiketaulukon ja taulukkomuuttujan tulosteen, kun nimiketaulukkoon lisätään uusia tietueita, erittelytunnus ei ole osa lisäyslauseketta . Voit kuitenkin käyttää TULOSTUSLAUSEKKEEN Eremid-saraketta.
käyttämällä Lähtökalusea, jossa on päivitetyt tiedot
, voit käyttää joko lisättyä tai poistettua virtuaalista taulukkoa, jossa on tulostuslauseke vaatimuksesi mukaan.
Jos haluat käyttää vanhoja arvoja, jotka olivat ennen uuden arvon päivittämistä, voit käyttää poistettua virtuaalitaulukkoa ja jos haluat käyttää uusia päivitettyjä arvoja, voit käyttää lisättyä virtuaalitaulukkoa Tulostuslausekkeella.
seuraavassa lauseessa päivitämme Nimiarvon Nimiketaulukkoon ja tallennamme tietueiden vanhat arvot tulostuslausekkeen avulla taulukkomuuttujaan @update_log.
koska haluamme käyttää vanhoja tietueita, käytämme poistettuja virtuaalitauluja.
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
kuten näkyy, tässä on kolme tuotosta seuraavasti
1: se on taulukon tuotos ennen tietueiden päivittämistä.
2: se on taulukon tuotos tietueiden päivittämisen jälkeen.
3: taulukkomuuttujan palauttama tuotos pitää sisällään Vanhat tietueiden arvot, jotka olivat ennen päivitystä.
Jos haluat käyttää uusia tietueita, voit käyttää lisättyä virtuaalista taulukkoa poistettujen sijasta.
Tulostuslauseke, jossa poistetaan lauseke
seuraava lauseke käyttää delete query-kyselyä poistaakseen tietueen ItemId= 1 Nimiketaulukosta ja tallentaakseen poistetut tietueet taulukkomuuttujaan Tulostuskalusen avulla .
poistettujen tietueiden tulostuslausekkeessa käytetään poistettua virtuaalitaulukkoa, joka sisältää rivien vanhan kopion.
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
kuten näkyy , Nimiketaulukossa ei ole tietoa, koska se on poistettu, mutta tulostuslauseke lisää poistetut tietueet taulukkomuuttujaksi @delete_log, joka on erittäin hyödyllistä pitää kirjaa poistetut tietueet.
suositellaan
SQL Server Temporal Tables
822 kokonaiskuvaa, 8 katselukertaa tänään