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.
- beillesztve, amely tartalmazza az új sorokat (Beszúrás vagy frissítés)
- 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
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