SqlSkull

SQL Server OUTPUT záradék visszaadja az értékeket minden sorban, hogy érintette egy betét, frissítés vagy törlés nyilatkozatok.

A kimeneti záradék a lekérdezés végrehajtása során egy külön táblázatba illeszthető adatok másolatát adja vissza.

ezt a záradékot leggyakrabban a táblázat adatváltozásának nyomon követésére használják ellenőrzés céljából.

kimeneti záradék hozzáférést biztosít két virtuális táblázatok az alábbiak szerint.

  1. beillesztve, amely tartalmazza az új sorokat (Beszúrás vagy frissítés)
  2. törölve, amely tartalmazza a sorok régi példányát (üres a beszúráshoz)

a kimeneti záradék hozzáférhet a táblázat összes oszlopához, még azok is, amelyek nem részei a beszúrási nyilatkozatnak .

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 
nézzünk meg egy példát , először létrehozunk egy elemet tartalmazó táblázatot .
CREATE TABLE dbo.Item (ItemId Int identity(1,1),ItemName Varchar(20),ItemPurchasedDate Datetime)

A Kimeneti záradék betéttel nyilatkozatot

beszúrás kimeneti záradék eredménye egy táblázat , Első kijelentem, egy táblázat a változó tárolja az eredményt a kimeneti záradék ,valamint a kimeneti caluse szintaxis, hogy tárolja az eredmény a táblázat változó .

a beillesztett rekordok eléréséhez a kimeneti záradék az új sorokat tartalmazó beillesztett virtuális táblát használja.

A következő nyilatkozatot, mi helyezzen be egy lemezt a Tétel táblázat használata a kimeneti záradékot kell tárolni azokat a rekordokat, a táblázat változó @insert_log, mint alábbiakban

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 ;

Mint látható, a kimeneti Elem táblázat, valamint a táblázat változó, Míg behelyezése új bejegyzések a tétel táblázat ItemId nem része a beszúrás nyilatkozatot . A kimeneti záradékban azonban hozzáférhet az Elemid oszlophoz.

a kimeneti caluse használatával frissítési utasítás

a frissített rekordok eléréséhez használhatja a beillesztett vagy törölt virtuális táblát kimeneti záradékkal az Ön igényei szerint.

ha olyan régi értékeket szeretne elérni, amelyek az új érték frissítése előtt voltak, akkor használhatja a törölt virtuális táblát, és ha új frissített értékeket szeretne elérni, akkor használhatja a beillesztett virtuális táblát a kimeneti záradékkal.

a következő nyilatkozatban frissítjük az Elemtáblázat Elemnevének értékét, majd a kimeneti záradék segítségével tároljuk a rekordok régi értékeit egy @update_log táblázatváltozóba.

mivel a régi rekordokat szeretnénk elérni, ezért a törölt virtuális táblát használjuk.

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

mint látható, itt van három kimenet a következőképpen

1: Ez a táblázat kimenet frissítése előtt a rekordokat.

2: Ez a táblázat kimenet frissítése után a rekordokat.

3: a táblázat változó által visszaadott kimenet tartja a régi rekordértékeket, amelyek a frissítés előtt voltak.

ha új rekordokat szeretne elérni, akkor a beillesztett virtuális táblát használhatja a törölt helyett.

kimeneti záradék a Delete Statement

következő utasítás Használja delete query törölni a rekordot ItemId= 1 elem táblázat tárolja a törölt rekordokat táblázat változó kimeneti caluse.

a törölt rekordok eléréséhez a kimeneti záradék a törölt virtuális táblát használja, amely tartalmazza a sorok régi példányát.

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

mint látható , Nincs adat a Tételtáblázatban, mivel törlésre kerül, de a kimeneti záradék beilleszti a törölt rekordokat egy @delete_log táblázatváltozóba, amely nagyon hasznos a törölt rekordok nyomon követéséhez.

ajánlott az Ön számára

SQL Server Temporal Tables

822 összes megtekintés, 8 megtekintés ma

Related Posts

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük