SQL Server Trigger frissítés után egy adott érték
által: Dallas Snider | korszerűsített: 2015-09-10 / Hozzászólások (6) | kapcsolódó: több > triggerek
probléma
létre kell hoznom egy SQL Server trigger, amely végrehajtja, ha egy oszlop értéke frissül egy adott értéket. Hogy tehetném ezt?
megoldás
ebben a tippben megmutatjuk, hogyan írhatunk T-SQL utasításokat, amelyek létrehoznak egy SQLServer triggert,amely az oszlop értékének egy adott értékre történő frissítése után fut.
az alábbi képen látható, hogy hol készítjük el a tbltriggertest nevű példatáblánkat egy pkid nevű elsődleges kulcsoszloppal, egy OrderApprovalDateTime nevű dátumoszloppal és egy OrderStatus nevű varchar oszlopgal. A táblázatot három tesztrekorddal töltjük fel, a OrderApprovalDateTime null értékre van állítva, a OrderStatus pedig”függőben” van.
ebben a példában azt akarjuk, hogy a trigger feltöltse a OrderApprovalDateTime-ot a Getdate() függvény által megadott aktuális dátummal, miután az OrderStatus frissítve lett”jóváhagyva”. A trigger létrehozásához szükséges T-SQL az alábbiakban látható. Nagyon fontos, hogy a belső csatlakozást a beillesztett táblához illesszük, hogy csak a frissített sorok legyenek érintettek. Ha az OrderStatus= “jóváhagyott” záradékot önmagában a frissített sorok korlátozására használja, akkor az összes sornak egyidejűleg frissíti a jóváhagyott OrderStatus értéket.
a trigger teszteléséhez végrehajtunk egy T-SQL frissítési nyilatkozatot, hogy az OrderStatus értéket a táblázat első sorához” jóváhagyott ” értékre állítsuk (pkID = 1). A T-SQL UPDATE parancs után végrehajtunk egy T-SQL SELECT lekérdezést, hogy megbizonyosodjunk arról, hogy a trigger helyesen van-e végrehajtva. A frissítés kimenete, majd a kijelentések kiválasztása az alábbiakban látható.
vegye figyelembe a fentieket, hogy csak az első sornak volt Megrendeléseapprovaldatetime beállítva az aktuális dátumra, ami a kívánt viselkedésünk. Azonban egy második tesztet kell futtatnunk annak biztosítása érdekében, hogy a sorok megfelelő száma frissüljön. Második tesztünkben végrehajtunk egy T-SQL frissítési nyilatkozatot, hogy a OrderStatus értéket a táblázat második sorához “jóváhagyásra” állítsuk (pkID = 2). Miután kiválasztotta az összes rekordot a táblázatban, vegye figyelembe, hogy a Megrendelésaz Approvaldatetime a második sorhoz nem egyenlő a Megrendelésselprovaldatetime az első sorban. Ismét ez a kívánt viselkedés, és minden jól jelenik meg.
a tipp teljes kódja az alábbi mezőben található.
use MSSQLTipsgocreate table tblTriggerTest( pkID integer Identity(1,1) primary key, OrderApprovalDateTime datetime, OrderStatus varchar(20))insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')select * from tblTriggerTestgocreate trigger trTriggerTest on tblTriggerTestafter updateasbegin set nocount on; update tblTriggerTest set OrderApprovalDateTime=getdate() from tblTriggerTest t inner join inserted i on t.pkID=i.pkID and i.OrderStatus='Approved'endgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=1goselect * from tblTriggerTestgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=2goselect * from tblTriggerTestgo
következő lépések
néhány perc alatt megtudhatja, mi történik, ha megváltoztatja a belső csatlakozást, vagy további oszlopokat ad hozzá a táblához és a triggerhez.
is, nézd meg további tippeket ontriggers az SQL Server MSSQLTips.com.
- Kényszerítve Ravaszt Tüzelési Parancsot az SQL Server
- Megakadályozza a véletlen update vagy delete parancsok minden sor egy SQL Server táblázat
- Naplózás, amikor Elindítja vagy ki, vagy be az SQL Server
Utolsó frissítése: 2015-09-10
a szerzőről
tekintse meg az összes tippemet
- további adatbázis-Fejlesztő tippek…
Leave a Reply