Triggerek: létrehozás és alkalmazás. Az egyszerű MS SQL triggerek példáit kiváltja

Az interneten már sok cikk van az SQL-ről az SQL-ről, de hozzászok egy többet megfelelő példákkal az anyagok konszolidálására azoknak, akik "a témában", és mi lenne jobb megérteni az anyagokat azoknak, akik most kezdtek megérteni az anyagokat "Zen SQL". Ugyanakkor, és hozzon létre egy vitát a témáról.

Azonnal kell foglalnia, hogy véleményem csak az én véleményem, néha nagyon kategorikus. Számos ok miatt nagy terhelhető helyszínekkel és összetett webes alkalmazásokkal kell dolgozni.

A rájuk dolgozik, egy értékes élményt hajtottak végre - követi a prioritásokat és a statisztikákat. Mit jelent? Minden egyszerű: ha van egy blogod, és napi 2-3-4-10012 millió látogatója van, és a cikkeket csak 1-2-3435 alkalommal írják naponta (nagyságrenddel kevesebb, mint a nézetek száma) Ezután az árucikk (és ennek összetettségének megőrzésének sebessége a cikk jelzési sebességéhez viszonyítva arányos lehet. Minél több show, a show a show, és nem a cikk / oldal / táblázat megőrzése. Mit jelent, hogy lazítson. A cikk megőrzése 3-5-10 másodpercig a blogban a megfelelőség keretein belül van, de az oldal generálása több mint 2 másodpercig (+ a szkriptek és stílusok betöltése) - ez a szélén van "Milyen forrasztott webhely, olvastam valamit", és rosszabb, megyek vásárolni egy másik helyen. "

Ha az átlagos helyet a szavazás / karma, megjegyzések, egy oldalmérő stb., Aztán sok fejlesztő elgondolkodik, mint a megjegyzések, mint a Comment.Page \u003d Page_ID. Nos, gondolj minden cikkre, hogy kiszámítsa a minősítés összegét, a megjegyzések összegét. És minden egyes szakaszból fő cikkeinken vannak. Ha a második személy másodpercenként, az átlagos VPS-nél, akkor engedélyezheti magát 60-100 sql lekérdezésenként (Hello, Bitrix).

De a vonalhoz a dalszövegek (már húzva, valószínűleg). Naked adatok:

Asztali blog.

Hozzon létre táblázatot, ha nem létezik a "Blog" (ID` int (11) NULL AUTO_Increment, `Cím Varchar (128) NULL,` TEXT` szöveg Nem Null, `Creation` DateTime Not NULL,` Módosítás `DateTime Null, "Img` Varchar (128) NEM NULLE DEFAULT" DEFFEAL.PNG ",` status` tinyint (4) nem null alapértelmezett "2", `user_id` int (11) nem ,` rate` int (11) nem , `relax_type` tinyint (4) NEM NULL,` időzítők qimestamp nem null alapértelmezett current_timestamp, `contest` tinyint (1) nem null alapértelmezett" 0 ",` nézetek `int (11) nem null alapértelmezett" 0 ",` Megjegyzés ` INT (11) NEM NULL, `URL` Varchar (128) NEM NULL, elsődleges kulcs (` id "), egyedi kulcs" URL "(` URL), kulcsfontosságú "` country_id "(` country_id`), kulcs "user_id` (`user_id`), kulcs` status` (`status`)) motor \u003d innoDB alapértelmezett karakter \u003d UTF8 auto_increment \u003d 1456435;

Megjegyzések táblázat

TÁBLÁZAT létrehozása, ha nem létezik `megjegyzések` (`tulajdonos_neve` varchar (50) NULL,` Tulajdonos_ID` int (12) NEM NULL, `INT (12) NULL AUTO_INCREMENT,` Parent_id` Int (12) Alapértelmezett , `user_id `Int (12) Alapértelmezett ,` Text`te, `Creation` timestamp null alapértelmezett current_timestamp,` status` int (1) nem null alapértelmezett "0", elsődleges kulcs (`id"), kulcs "tulajdonos_name" (`tulajdonos_neve) `,` inway_id`), kulcs `parent_id` (` szülő_id`)) motor \u003d myisam alapértelmezett karakter \u003d UTF8 auto_increment \u003d 243254252;

Amint láthatja, a blog asztalnál minden cikknek van egy megjegyzések számlálója (kommentár).
Egyszerű gyakorlat:
1. Hozzáadott egy megjegyzést - növelte a számlálót a bloghoz
2. A megjegyzés eltávolítása / elrejtése - csökkentette a számlálót.
Tegye ezt a kódban kényelmes és szokásos, de van egy kényelmesebb eszköz - triggerek.

És így van 2 eseményünk (valójában 3): megjegyzés és törlés létrehozása (a harmadik esemény az állapotának ("törlés", tilalom stb.).
Tekintsük csak a teremtést és törlést, és hagyja, hogy az állapotváltozás házi feladat legyen.

A példában van egy funkció: a megjegyzések többféle cikkhez is lehetnek.

Megjegyzés létrehozása:

Hozzon létre trigger `add_count_commment` beillesztés után a "megjegyzések" minden sorban Begin // A felhasználó a személyes fiókban úgy vélem, mennyire megjegyzések írta a felhasználói felhasználói user.countcomment \u003d user.countcomment + 1, ahol user.Id \u003d new.user_id; // Határozza meg, hogy a megjegyzés utalja, és azonnal növelje a számlálót az alábbi táblázatokban Új.`owner_Name` Milyen "blog", majd frissíti a "blog" set` blog`.`comment` \u003d `blog`comment` + 1, ahol" blog " .id \u003d új.`owner_id`; Amikor a "Cikk", majd frissíti a "cikk" című részét. `Comment` \u003d` cikk. `Comment` + 1, ahol` cikk`.`id` \u003d new.`id` Amikor a "populátum", akkor frissítse a "populing_place" beállítást. `Comment` \u003d` populing_place`. `Hozzászólás` + 1, ahol" populate_place`.`id` \u003d new.`owner_id`. Végső eset; // itt megkönnyítjük a munkáját a Hírszalagokkal // URL-cikkekkel, amelyeket azonnal írsz, így ne tegyen mintát a felesleges esetre, ha a "blog", akkor seterurl \u003d (válassza az URL-t a `blog" -ból `. id \u003d új.`owner_id`); Ha a "Cikk", akkor állítsa be a UperURL \u003d (válassza az URL-t a `Cikk` -ről, ahol a cikk. Amikor a "populátum", akkor állítsa be a userurl \u003d ``; Végső eset; // A cikk neve azonnal írásban van, ezért ha nem, hogy ne tegyünk példányt az eset új.`owner_name` milyen "blog", akkor állítsa be a USERTITLE \u003d (válassza ki a címet a `blog`wer_id`); Ha a "Cikk", akkor állítsa be a USERTITLE \u003d (válassza ki a címet a `Cikk` -ől, ahol artict.Id \u003d New.`owner_ID`); Amikor a "populátum", akkor állítsa be a USERTILE \u003d ``; Végső eset; Helyezze be a user_has_events értékeket (new.user_id, new.id, "megjegyzések", most (), userurl, instititle); Vége.

Hasonlóképpen és az eltávolítás megjegyzése:

Hozzon létre trigger `del_count_commment` miután törlés a "megjegyzések" minden sorban megkezdi a felhasználó beállítása user.countcomment \u003d user.countcomment -1, ahol user.Id \u003d old.User_id; Case Res.`owner_name` Mi a "blog", majd frissíti a "blog" set` blog`.`comment` (`blog`.` Hozzászólás`-1, ahol "blog`id`id` \u003d old.`owner_id`; Ha "cikk", akkor frissítés "A" cikk ".` Cikk`. `Hozzászólás` (`cikk`.` Comment`-1, ahol ``.`id`id` \u003d old.`id` Amikor a "populátum", akkor frissítse a "populing_place" beállítást "populing_place`.`comment` \u003d` populing_place`. `Hozzászólás`-1, ahol" populing_place`.`id` \u003d old.`owner_id` Végső eset; Vége.

És így van:
1. A megjegyzés beillesztésekor automatikusan az SQL Server automatikusan használatos, a megjegyzések összege egy adott megjegyzés objektumon (cikk, oldal, megjegyzések)
2. Híres táplálkozást alakítottunk ki (Hello minden közösségi hálózatra stb.)
3. Ha egy megjegyzés törlődik, az összes adat levonása van.
4. Nem használtuk a keretet.
5. Az összes szükséges adat minta gyorsan bekövetkezik (csak 1 kérés, amikor az oldal megjelenik, kivéve a "bal oldali" adatokat.)

És van egy sphinx, amely rendszeresen az utolsó pillanatban megváltozott cikkek mintáját teszi. Ehhez a blog módosítási mezővel rendelkezik.

Hozzáadott trigger:

Hozzon létre trigger `ins_blog` -t, mielőtt beilleszti a" blog "// A beillesztést az adatok" helyettesítésével "az adatok mentése előtt. Minden sorban kezdődik az új.modifikáció \u003d most (); Vége.

Most a minta az utolsó pillanatban megkapjuk az összes dokumentumot, amelyet az utolsó pillanatban hozzáadtunk.

Hozzon létre trigger `ins_blog` -t, mielőtt frissítené a" blog "// beillesztést, mielőtt az adatok" helyettesítése "-t takarít meg. Minden sorban kezdődik az új.modifikáció \u003d most (); Vége.

Az adatok megváltoztatásakor frissítem a keresési indexet is.

Általában egy átlagos projekt, mindaz, amely átvihető az SQL Server oldalára. Az SQL Server maga gyorsabbá teszi az ilyen műveleteket, és kisebb erőforrásokkal, mint a használt programozási nyelven keresztül.

UPD: A DB struktúra komplikációjának megvalósíthatóságára szánt Cholivar nyitva van.

Trigger:

<Определение_триггера>:: \u003d (Alter létrehozása) TRIGGER_TRIGGER NAME ON (NAME_TABLE | Nyomtatás neve) ((| Ahelyett, hogy | helyett) ([törlés] [,] [INSERT] [,] [UPDATE]) [APPEND] replikációs] AS SQL_ üzemeltető [... n]) | ((a | követően | helyett) ([,]) [a hozzáfűzése] [Nem replikációs] [(IF UPDATE) UPDATE (és | RANGE_NAME)] [. .. n] | ha (oszlopok_updátok () (operator_bit_purpace) bit_maska_imament) (operator_bit_sob) bit_mask [... n]) SQL_ operátor [... n]))

A trigger lehet létrehozni csak az aktuális adatbázisban, de nem mozoghat szabadon a ravaszt más adatbázisokhoz, ideértve található egy távoli szerveren.

Fontolja meg az érvek kinevezését a létrehozásból Változó trigger.

A trigger neve egyedinek kell lennie az adatbázisban. Ezenkívül megadhatja a tulajdonos nevét.

Amikor megadja a titkosítással érv, a szerver titkosítja a ravaszt kódot úgy, hogy senki, még rendszergazda, nem lehet hozzáférni, és elolvasta. A titkosítást gyakran használják a szerzői jogi adatfeldolgozó algoritmusok elrejtésére, amelyek a programozó vagy a kereskedelmi titok szellemi tulajdonságai.

A triggerek típusai

Az SQL Serverben két paraméter van, amelyek meghatározzák a kiváltók viselkedését:

  • Utána. A trigger a parancsok sikeres végrehajtása után történik. Ha a parancsok bármilyen okból nem sikerült befejezni, a trigger nincs végrehajtva. Meg kell jegyezni, hogy az adatok változások eredményeként a végrehajtás a felhasználó kérésére és a végrehajtás a ravaszt végezzük a test egyetlen tranzakció: ha a ravaszt rollback történik, és a felhasználói módosításokat elutasításra kerül. Minden egyes művelethez több utólagot határozhat meg (beillesztés, frissítés, törlés). Ha a táblázat a több utólagos végrehajtásának végrehajtására szolgál, az SP_SETTRIGERODER rendszer tárolt eljárással megadhatja, hogy melyik az első végrehajtásra kerül sor, és mi az utolsó. Alapértelmezés szerint az SQL Serverben az összes kiváltó utáni triggerek.
  • Ahelyett. A trigger a parancsok végrehajtása helyett. Az UtaDriggerrel ellentétben - a -trigger helyett mind az asztalra, mind a bemutatóra meghatározható. Minden egyes betéthez, frissítési művelethez csak egytrigger helyett definiálhat.

A triggerek megkülönböztetik azokat a parancsokat, amelyekre reagálnak.

Háromféle trigger található:

  • Helyezze be a triggeret - Indítsa el, ha megpróbálja beilleszteni az adatokat a Beszúrás parancs segítségével.
  • Frissítési trigger - Indítás Ha megpróbálja megváltoztatni az adatokat a frissítési parancs segítségével.
  • Törlés törlése - Indítsa el, ha megpróbálja törölni az adatokat a Törlés parancs segítségével.

Tervek [Törlés] [,] [Insert] [,] [Frissítés] és Mert | Utána | Ahelyett) ([,] Határozza meg, hogy melyik parancsot reagáljon. Amikor létrehoz, legalább egy csapatnak kell megadnia. Megengedett trigger létrehozásakét vagy három csapatra válaszol.

Az Append argumentum lehetővé teszi az egyes típusok több kiváltóinak létrehozását.

-Ért a trigger létrehozása A nem replikációs érvekkel nem tilos elindítani a replikációs mechanizmusok táblázatos módosítása során.

A design, mint SQL_ operátor [... n] Meghatározza az SQL operátorok és parancsok beállítását, amelyeket a trigger elindításakor hajtanak végre.

Meg kell jegyezni, hogy számos művelet nem engedélyezett a trigger belsejében, például:

  • az adatbázis létrehozása, módosítása és törlése;
  • biztonsági adatbázis vagy tranzakciós napló visszaállítása.

Ezeknek a parancsoknak a végrehajtása nem megengedett, mivel nem lehet törölni, ha a tranzakció visszavezethető, amelyben a ravaszt hajtják végre. Ez a tilalom nem valószínű, hogy valahogy befolyásolja a létrehozott triggerek funkcionalitását. Nehéz olyan helyzetet találni, ahol például a táblázat sorának megváltoztatása után vissza kell állítania a tranzakciós napló biztonsági mentését.

Trigger programozás

A parancsok hozzáadásakor a feljegyzések módosítása és törlése esetén a kiszolgáló két speciális táblázatot hoz létre: beillesztve. és törölve.. A tranzakció befejeződése után beillesztésre vagy törlésre kerülő karakterláncokat tartalmaznak. A beillesztett és törölt táblázat szerkezete megegyezik az asztali struktúrával, amelyhez a ravaszt határozza meg. Minden egyes trigger esetében a beillesztett és törölt asztalok készlete létrejön, így más indítás nélkül sem férhet hozzá. A kiváltó végrehajtás által okozott művelet típusától függően a beillesztett és törölt táblázatok tartalma eltérő lehet:

  • a beillesztési parancs - a beillesztett táblázatban tartalmazza azokat a sorokat, amelyeket a felhasználó megpróbál beilleszteni az asztalra; A törölt táblázatban nem lesz sor; A trigger befejezése után minden sor a beillesztett táblázatból a forrás táblázatba lép;
  • a parancs törlése - A törölt táblázatban tartalmazza az összes olyan sor, amelyet a felhasználó megpróbál eltávolítani; A trigger ellenőrizheti az egyes sorokat, és meghatározhatja, hogy eltávolítható-e eltávolítása; A beillesztett asztal nem lesz vonal;
  • frissítési parancs - A törölt táblázatban végzett végrehajtáskor régi sorok vannak, amelyek sikeres befejezés után törlődnek.

Trigger (adatbázisok)

Trigger (Eng. trigger.) - Ez egy speciális típusú tárolt eljárás, amelyet a felhasználó nem okoz közvetlenül, és amelynek végrehajtását az adatok módosítása az adatok módosításával: beillesztéssel, törlés egy törlési vonalat egy meghatározott táblázatban, vagy módosítva A frissítési adatok egy meghatározott relációs adatbázis-táblázat meghatározott oszlopában. A kiváltók az adatok integritásának és a komplex üzleti logika megvalósításának biztosítása érdekében alkalmazzák. A trigger automatikusan futtatja a kiszolgálót, amikor megpróbálja megváltoztatni az asztalon lévő adatokat, amellyel csatlakoztatva van. Az általuk előállított összes adatmódosítás az olyan tranzakcióban történik, amelyben a műveletet végrehajtották, ami a ravaszt kiváltását okozza. Ennek megfelelően az adatok integritásának hibája vagy megzavarása esetén ez a tranzakciós visszavonás előfordulhat.

A trigger kezdeteinek pillanatát a kulcsszavak előtt határozzák meg (a trigger elkezdi végrehajtani a kapcsolódó eseményt; például a felvétel hozzáadása előtt) vagy után (az esemény után). Abban az esetben, ha a triggeret az esemény előtt hívják, akkor az esemény által módosított esemény (természetesen, feltéve, hogy az esemény nem törli a rekordot). Egyes DBMS korlátozást szab ki az olyan üzemeltetőkre, amelyek egy triggerben használhatók (például tilos, hogy módosítsa az olyan táblázatot, amelyen "lógó" ravaszt stb.)

Ezenkívül a triggerek köthetők az asztalhoz, hanem a képviselethez (nézet). Ebben az esetben a segítségükkel a "frissített képviselet" mechanizmusa megvalósul. Ebben az esetben a korábbi és úttóli kulcsszavak csak a trigger hívások sorrendjét befolyásolják, mivel maga az esemény (törlés, beillesztés vagy frissítés) nem fordul elő.

Bizonyos kiszolgálóknál a triggerek nem minden módosítható rekordra hívhatók, de egyszer az asztal megváltoztatására. Az ilyen triggereket tabletta.

Példa (Oracle):

/ * Az asztal szintjén * / Hozzon létre vagy cserélje ki a TristringUpdattattrigger-t a RECTIRT frissítése után Indítsa el az INFO értékekbe ( "Táblázat" kerület megváltozott "); Vége;

Ebben az esetben a táblázatos triggerek különbségeire további kulcsszavakat vezetnek be a kisbetűkről, amikor leírják a vonalindításokat. Az Oracle-ben ez az egyes sorok kifejezése.

/ * Trigger a string szinten * / Hozzon létre vagy cserélje ki a TristringUpdattattrégger létrehozását vagy cseréjét az egyes sorok kerületének frissítése után Minden sorban kezdődik az INFO értékekbe ( "Az egyik karakterlánc a" District "megváltozott"); Vége;


Wikimedia Alapítvány. 2010.

  • Háztartás
  • Spektroszkópia

Nézze meg, mi az "trigger (adatbázisok)" más szótárakban:

    Bemutatás (adatbázisok) - Ez a kifejezésnek más jelentései vannak, lásd a bemutatót. Bemutatás (Eng. View, több Consonant nem a "Nézet" szabvány neve, a Slane programozók gyakran használják a British "Bind", "Blind" -tól) ... ... Wikipedia

    Hierarchikus adatbázisok - Az adatbázis hierarchikus modell áll tárgyak mutató a szülő objektumok leszármazottai, kapcsolja össze a kapcsolódó információkat. A hierarchikus adatbázisok képviselhetők, mint egy különböző szintű objektumokból álló fa. ... ... Wikipedia

    Relációs adatbázisok - relációs adatbázis adatbázis egy relációs adatmodell alapján. A "relációs" szó az angol nyelvről származik. Kapcsolat. A relációs adatbázisokat relációs adatbázisokkal való együttműködésre használják. A relációs adatbázisok használata ... ... Wikipedia

    Index (adatbázisok) - Ez a kifejezésnek más értékei vannak, lásd az indexet. Index (angol index) Az adatkeresési teljesítmény javítása érdekében létrehozott adatbázis objektum. Az adatbázisban található asztalok nagyszámú vonalat tartalmaznak, amelyek a ... Wikipedia-ban vannak tárolva

    Kurzor (adatbázis) - Ez a kifejezésnek más jelentései vannak, lásd a kurzort (értékek). A kurzor hivatkozás a kontextus memória területére [a forrás nincs megadva 126 nap]. Az információs logikai nyelv egyes implementációiban SQL (Oracle, ... ... Wikipedia

    Trigger (értékek) - trigger (ENG. A főnév "kutyus, egy retesz, egy általános értelemben, amely egy általános értelemben vezet, amely egy akcióelemhez vezet"; az "cselekvés" ige értelmében: oroszul, a kifejezés Kezdeti a régióból ... ... Wikipedia

    Adatbázis-refraktálás - (Eng. Adatbázis-refraktálás) Ez az adatbázis séma egyszerű változása, amely segít a projekt javításában, miközben fenntartja a funkcionális és információs szemantikát. Más szóval, az adatbázis-refaktor következménye nem lehet ... ... Wikipedia

    Adatbázis - a "BD" kérést átirányítják itt; Lásd még más értékeket is. Objektíven bemutatott adatbázis független anyagok (cikkek, számítások, rendeletek, bírósági határozatok és egyéb hasonló anyagok kombinációja), ... ... Wikipedia

    Adatbázis-tervezés - az adatbázis-séma létrehozásának folyamata és a szükséges integritás-korlátozások meghatározása. Tartalom 1 Alapvető adatbázis tervezési feladatok ... Wikipedia

    Adatmodell - A klasszikus adatbáziselméletben az adatmodell a bemutatás és az adatfeldolgozás formális elmélete az adatbázis-kezelő rendszerben (DBMS), amely legalább három szempontot tartalmaz: 1) A szerkezet aspektusa: A típusok leírása és .... .. Wikipedia

A trigger definíció, annak felhasználási területe, a ravasztó helye és szerepe az adatok integritásának biztosításában. Leírja a triggerek típusait. Hozzon létre operátorokat, változtassa meg, törölje a ravaszt. A programozási trigger példái az integritás korlátai és a statisztikai adatok összegyűjtésére szolgáló triggerek példái.

Trigger definíció az SQL nyelvi szabványban

A triggerek a tárolt eljárások egyik fajtái. Végrehajtásuk akkor következik be, ha az adatkezelési nyelvvezérlő (DML) táblázatában végrehajtásra kerül. A triggereket az adatok integritásának ellenőrzésére, valamint a tranzakciók visszaszorítására használják.

A trigger összeállított SQL eljárás, amelynek végrehajtása a relációs adatbázis egyes eseményeinek kialakulásának köszönhető. A triggerek használata többnyire kényelmes az adatbázis-felhasználók számára. És mégis felhasználásuk gyakran az I / O műveletekre vonatkozó további erőforrás-költségekhez kapcsolódik. Abban az esetben, ha ugyanazt az eredményt (a sokkal kevesebb nem termelési költségek erőforrások) alkalmazásával lehet elérni a tárolt eljárások vagy alkalmazási programok használata kiváltó helytelen.

Triggerek - egy speciális SQL Server eszköz az adatbázisban lévő adatok integritásának fenntartásához. Az integritás korlátozások, szabályok és alapértelmezett értékek segítségével nem mindig lehet elérni a kívánt funkcionalitás szintjét. Gyakran szükséges összetett adat-hitelesítési algoritmusok végrehajtása, amelyek garantálják pontosságát és valóságukat. Ezenkívül néha szükség van a táblázat értékeinek módosítására a kapcsolódó adatok helyes megváltoztatásához. A triggerek úgy tekinthetők, mint egyfajta szűrők, amelyek a szabályok, standard értékek stb.

A trigger egy speciális típusú tárolt eljárások a szerver automatikusan megpróbálja megváltoztatni a táblákat, amelyekkel kiváltó vannak kötve. Minden trigger egy adott asztalhoz van kötve. Az általuk előállított összes adatmódosítást egy tranzakciónak tekintik. Az adatok integritásának hibajelzése vagy megzavarása esetén ez a tranzakció visszafordul. Ezáltal tiltott változások. A kiváltó által már végrehajtott változtatás törlésre kerül.

Csak az adatbázis tulajdonosát hoz létre. Ez a korlátozás lehetővé teszi, hogy elkerülhető legyen a táblázatok szerkezetének véletlen változása, kommunikációs módszerek más tárgyakkal stb.

A trigger nagyon hasznos és egyidejűleg veszélyes ügynök. Így helytelen logikai munkája, akkor könnyen elpusztítani egy egész adatbázist, így a kiváltó kell nagyon óvatosan hibakeresése.

A szokásos alprogrammal ellentétben a trigger implicit módon kerül kiszámításra minden esetben trigger esemény, Ezenkívül nincs argumentuma. A cselekvéshez néha a trigger elindításnak nevezik. A triggerek segítségével a következő célokat érjük el:

  • a bevitt adatok helyességének ellenőrzése és összetett adatintegritási korlátozások végrehajtása, amelyek nehéz, ha általában az asztalra telepített integritási korlátok segítségével fenntarthatók;
  • olyan figyelmeztetések kibocsátása, amelyek hasonlítanak arra, hogy bizonyos intézkedéseket kell végrehajtani a táblázat frissítése során, bizonyos módon megvalósítva;
  • az ellenőrzési információk felhalmozódása a módosítások és az általuk teljesített információk rögzítésével;
  • replikációs támogatás.

A létrehozási trigger parancs fő formátuma az alábbiak:

<Определение_триггера>:: \u003d Hozzon létre trigger name_trigger előtt | Utána<триггерное_событие> TOVÁBB.<имя_таблицы> <тело_триггера>

tradger események A táblázatban lévő karakterláncok beillesztéséből, törléséből és frissítéséből áll. Az utóbbi esetben trigger esemény Megadhatja az asztali oszlopok sajátos nevét. A trigger kezdési időpont meghatározása az előtt kulcsszavak (trigger elindítja végre a kapcsolódó eseményeket) vagy után (miután a végrehajtás).

Által végzett műveletek a ravaszt vannak beállítva minden sora (mindegyik sor) hatálya alá ezt az eseményt, vagy csak egyszer minden eseményt (Minden nyilatkozat).

Kijelölés <список_старых_или_новых_псевдонимов> Olyan komponensekre vonatkozik, mint régi vagy új vonal (régi / új) vagy egy régi vagy új tábla (régi asztal / új táblázat). Nyilvánvaló, hogy a régi értékek nem alkalmazhatók az események beillesztésére és az újakra - a törlési eseményekhez.

A megfelelő használatra is figyelemmel a trigerek nagyon erős mechanizmussá válhatnak. Az előnyük legfőbb előnye, hogy a szabványos funkciókat az adatbázisban tárolják, és folyamatosan aktiválják minden alkalommal, amikor frissül. Jelentősen egyszerűsítheti az alkalmazásokat. Mindazonáltal meg kell említeni a triggerben rejlő hátrányokat:

  • nehézség: Néhány funkció mozgatásakor a tervezés, a megvalósítás és az adminisztráció feladata bonyolult;
  • rejtett funkcionalitás: A funkciók egy részének átvitele az adatbázisba, és mentse őket egy vagy több triggerek formájában, néha egy bizonyos funkcionalitás felhasználójának elrejtését eredményezi. Bár bizonyos mértékig egyszerűsíti azt, de sajnos nem tervezett, potenciálisan nemkívánatos és káros mellékhatásokat okozhat, mivel ebben az esetben a felhasználó nem tudja ellenőrizni az adatbázisban előforduló összes folyamatot;
  • a teljesítményre gyakorolt \u200b\u200bhatás: Az egyes parancsok végrehajtása előtt a DBMS adatbázis állapotának megváltoztatásához ellenőriznie kell a ravasztási állapotot annak érdekében, hogy meg kell találnia a parancs elindításának szükségességét. Az ilyen számítások végrehajtása befolyásolja a DBMS általános teljesítményét, és a csúcs terhelés pillanataiban, a csökkenés különösen észrevehető. Nyilvánvaló, hogy növeli a triggerek számának növekedését, az ilyen műveletekhez kapcsolódó felső költségek növekedése.

A helytelenül írt triggerek komoly problémákhoz vezethetnek, például a "halott" zárak megjelenése. A triggerek sokáig sok erőforrást blokkolhatnak, ezért különös figyelmet kell fordítani a hozzáférési konfliktusok minimalizálására.

A triggerek végrehajtása az MS SQL Server MS-ben

Az MS SQL Server DBMS megvalósításában a következő üzemeltető vagy a váltás kiindulási szolgáltatója használható:

<Определение_триггера>:: \u003d (Alter létrehozása) Trigger_trigger Name on (Name_name | View_name) ((a | után | helyett) ([törlés] [,] [Insert] [,] [UPDATE]) [APPEND] ] SQL_ operátor [... n]) | ((for | helyett | helyett) [[,]) [függelékkel] [nem replikációra] [(ha frissítés) frissítés (és | Range_Name)] [.. . n] | ha (oszlopok_updátok () () (operator_bit_purpace) bit_maska_imament) (operator_bit_sob) bit_mask [... n]) SQL_ operátor [... n]))

A trigger lehet létrehozni csak az aktuális adatbázisban, de nem mozoghat szabadon a ravaszt más adatbázisokhoz, ideértve található egy távoli szerveren.

Fontolja meg az érvek kinevezését a létrehozásból Változó trigger.

A trigger neve egyedinek kell lennie az adatbázisban. Ezenkívül megadhatja a tulajdonos nevét.

A titkosítási érvelés megadásakor a kiszolgáló titkosítja a trigger kódot úgy, hogy senki ne, beleértve a rendszergazdát, nem fér hozzá, és elolvashatja. A titkosítást gyakran használják a szerzői jogi adatfeldolgozó algoritmusok elrejtésére, amelyek a programozó vagy a kereskedelmi titok szellemi tulajdonságai.

A triggerek típusai

Az SQL Serverben két paraméter van, amelyek meghatározzák a kiváltók viselkedését:

  • Utána. A trigger a parancsok sikeres végrehajtása után történik. Ha a parancsok bármilyen okból nem sikerült befejezni, a trigger nincs végrehajtva. Meg kell jegyezni, hogy az adatok a felhasználó kérésének végrehajtása és a kiváltó végrehajtásának eredményeképpen változnak az egyetlen tranzakció testében: ha egy trigger visszautasítás következik be, és a felhasználói változtatásokat elutasítják. Minden egyes művelethez több utólagot határozhat meg (beillesztés, frissítés, törlés). Ha a táblázat a több utólagos végrehajtásának végrehajtására szolgál, az SP_SETTRIGERODER rendszer tárolt eljárással megadhatja, hogy melyik az első végrehajtásra kerül sor, és mi az utolsó. Alapértelmezés szerint az SQL Serverben az összes kiváltó utáni triggerek.
  • Ahelyett. A trigger a parancsok végrehajtása helyett. Ezzel ellentétben - Trigger, a -trigger helyett mind az asztalra, mind megtekintésre kerülhet. Minden egyes betéthez, frissítési művelethez csak egytrigger helyett definiálhat.

A triggerek megkülönböztetik azokat a parancsokat, amelyekre reagálnak.

Háromféle trigger található:

  • Helyezze be a triggeret - Indítsa el, ha megpróbálja beilleszteni az adatokat a Beszúrás parancs segítségével.
  • Frissítési trigger - Indítás Ha megpróbálja megváltoztatni az adatokat a frissítési parancs segítségével.
  • Törlés törlése - Indítsa el, ha megpróbálja törölni az adatokat a Törlés parancs segítségével.

Tervek [Törlés] [,] [Insert] [,] [Frissítés] és Mert | Utána | Ahelyett) ([,] Határozza meg, hogy melyik parancsot reagáljon. Amikor létrehoz, legalább egy csapatnak kell megadnia. Megengedett trigger létrehozásakét vagy három csapatra válaszol.

Az Append argumentum lehetővé teszi az egyes típusok több kiváltóinak létrehozását.

-Ért a trigger létrehozása A nem replikációs érvekkel nem tilos elindítani a replikációs mechanizmusok táblázatos módosítása során.

A design, mint SQL_ operátor [... n] Meghatározza az SQL operátorok és parancsok beállítását, amelyeket a trigger elindításakor hajtanak végre.

Meg kell jegyezni, hogy számos művelet nem engedélyezett a trigger belsejében, például:

  • az adatbázis létrehozása, módosítása és törlése;
  • biztonsági adatbázis vagy tranzakciós napló visszaállítása.

Ezeknek a parancsoknak a végrehajtása nem megengedett, mivel nem lehet törölni, ha a tranzakció visszavezethető, amelyben a ravaszt hajtják végre. Ez a tilalom nem valószínű, hogy valahogy befolyásolja a létrehozott triggerek funkcionalitását. Nehéz olyan helyzetet találni, ahol például a táblázat sorának megváltoztatása után vissza kell állítania a tranzakciós napló biztonsági mentését.

Trigger programozás

A parancsok hozzáadásakor a feljegyzések módosítása és törlése esetén a kiszolgáló két speciális táblázatot hoz létre: beillesztve. és törölve.. A tranzakció befejeződése után beillesztésre vagy törlésre kerülő karakterláncokat tartalmaznak. A beillesztett és törölt táblázat szerkezete megegyezik az asztali struktúrával, amelyhez a ravaszt határozza meg. Minden egyes trigger esetében a beillesztett és törölt asztalok készlete létrejön, így más indítás nélkül sem férhet hozzá. A kiváltó végrehajtás által okozott művelet típusától függően a beillesztett és törölt táblázatok tartalma eltérő lehet:

  • a beillesztési parancs - a beillesztett táblázatban tartalmazza azokat a sorokat, amelyeket a felhasználó megpróbál beilleszteni az asztalra; A törölt táblázatban nem lesz sor; A trigger befejezése után minden sor a beillesztett táblázatból a forrás táblázatba lép;
  • a parancs törlése - A törölt táblázatban tartalmazza az összes olyan sor, amelyet a felhasználó megpróbál eltávolítani; A trigger ellenőrizheti az egyes sorokat, és meghatározhatja, hogy eltávolítható-e eltávolítása; A beillesztett asztal nem lesz vonal;
  • frissítési parancs - Ha a törölt táblázatban végrehajtja, akkor régi sorok vannak, amelyek törlődnek, amikor a trigger sikeresen befejeződött. Az új sorok értékeit a behelyezett asztal tartalmazza. Ezeket a sorokat hozzáadják a forrás táblázathoz a trigger sikeres végrehajtása után.

A sorok számával kapcsolatos információkért, amelyek megváltoznak, amikor a trigger sikeresen befejeződött, használhatja a @@ RowCount funkciót; Visszaadja az utolsó parancshoz kezelt sorok számát. Hangsúlyozni kell, hogy a trigger elindul, anélkül, hogy megpróbálná megváltoztatni az adott karakterláncot, és a módosítási parancs végrehajtásának időpontjában. Az egyik ilyen csapat befolyásolja a sorok sorát, így a kiváltónak mindezeket a vonalat feldolgozza.

Ha a trigger úgy találta, hogy 100-ból 100-as, változó vagy törölt húrból csak az egyik nem felel meg egy vagy másiknak, akkor nincs behelyezve karakterlánc, módosítva vagy törölve. Az ilyen viselkedés a tranzakció követelményeinek köszönhető - vagy minden módosítást vagy bármelyiket kell elvégezni.

A trigger implicit módon meghatározott tranzakcióként történik, így a tranzakcióvezérlő parancsok a ravaszt belsejében engedélyezettek. Különösen, ha az integritáskorlátok megsértése a kiváltó végrehajtás megszakítására és a felhasználó által megpróbált összes változás törlése, akkor a Rollback tranzakciós parancsot kell használnia.

Az oszlopok listájának megszerzéséhez módosított, ha beillesztési vagy frissítési parancsokat végez, amelyek a kiváltó végrehajtást okozó parancsokat hajtották végre, használhatja az oszlopok_updátum () funkciót. Visszaad egy bináris számot, amelynek minden egyes bit, amely a fiatalabbakkal kezdődik, megfelel az asztali oszlopnak (az oszlopok sorrendjében egy táblázat létrehozásakor). Ha a bit "1" értékre van állítva, a megfelelő oszlop megváltozott. Ezenkívül az oszlop megváltoztatásának ténye és a frissítési funkció (Library_Name).

-Ért trigger eltávolítás Használt parancs

Drop trigger (NameTrigger) [, ... N]

Példákat adunk a triggerek használatára.

14.1. Példa. A ravaszt használata a korlátozások végrehajtása. A táblázathoz hozzáadott rekordban az eladott értékesített áruk száma nem lehet kevesebb, mint a maradékot a raktárasztalból.

A tranzakció táblázatában szereplő belépési parancs lehet például például:

Helyezze be a tranzakciós értékeket (3.1, -299, "01/08/2002")

A létrehozott triggernek a következőképpen kell válaszolni: Meg kell szüntetni a parancsot, ha az áruk értéke kisebb maradt, mint a beírt kóddal értékesített áruk (a termékkód példájában \u003d 3). A beillesztési rekordban az áruk számát a "+" jelzéssel jelöltük, ha az árut szállítják, és a "-" jelzéssel, ha eladják. A bemutatott trigger úgy van beállítva, hogy csak egy felvételt adjon hozzá.

Hozzon létre trigger trigger_ins-t a Beszúrás kezelésénél, mintha @@ RowCount \u003d 1 kezdődik, ha nem létezik (válassza a * lehetőséget a beillesztett, ahol -inserted.4<=ALL(SELECT Склад.Остаток FROM Склад,Сделка WHERE Склад.КодТовара= Сделка.КодТовара)) BEGIN ROLLBACK TRAN PRINT "Отмена поставки: товара на складе нет" END END 14.1. Példa. Az érték korlátainak végrehajtásához.

14.2. Példa. A statisztikai adatok gyűjtése.

Hozzon létre egy ravaszt, hogy feldolgozza a belépési beillesztési műveletet egy tranzakciós asztalra, például egy ilyen parancsot:

Helyezze be az értékek tranzakcióját (3,1,200, "01/08/2002")

elkészített áruk a 3. kóddal az Ügyféltől az 1. kóddal a 200 egység összegében.

Az áruk értékesítése vagy megszerzése során meg kell változtatni raktárkészletének összegét. Ha még nincs termék, akkor hozzá kell adnia a megfelelő bejegyzést a raktárasztalhoz. A trigger csak egy hozzáadott karakterláncot dolgozik.

Alter trigger trigger_ins a tranzakcióhoz a beillesztéshez Deklare @x int, @y int, ha @@ Rowcount \u003d 1 - Az asztali tranzakció felvétele - az áruk szállításával az értékesített áruk megkezdéseként nem kell - egyszerűen az ő egyensúlya Az asztali raktárból, ha nem létezik (válassza a * lehetőséget a beillesztett, ahol -inserted.Number< =ALL(SELECT Склад.Остаток FROM Склад,Сделка WHERE Склад.КодТовара= Сделка.КодТовара)) BEGIN ROLLBACK TRAN PRINT "откат товара нет " END --если записи о поставленном товаре еще нет, --добавляется соответствующая запись --в таблицу Склад IF NOT EXISTS (SELECT * FROM Склад С, inserted i WHERE С.КодТовара=i.КодТовара) INSERT INTO Склад (КодТовара,Остаток) ELSE --если запись о товаре уже была в таблице --Склад, то определяется код и количество --товара издобавленной в таблицу Сделка записи BEGIN SELECT @y=i.КодТовара, @x=i.Количество FROM Сделка С, inserted i WHERE С.КодТовара=i.КодТовара --и производится изменения количества товара в --таблице Склад UPDATE Склад SET Остаток=остаток[E-mail védett] Ahol a codtowder [E-mail védett] Vége. 14.2. Példa. A statisztikai adatok gyűjtése.

14.3. Példa. Hozzon létre egy ravaszt egy tranzakciós táblázatból származó felvételi törlési művelet feldolgozásához, például egy ilyen parancsot:

A termékhez, amelynek kódja a rekord eltávolításakor van megadva, meg kell állítani a maradékot a raktárban. A trigger csak egy távoli bejegyzést végez.

Hozzon létre trigger trigger_del-t a törléshez, mint ha @@ Rowcount \u003d 1 - egy BEING BECLARE @Y INT, @ X INT - határozza meg a kódot és az áruk számát a táblázatból az asztal kiválasztása: @ Y \u003d Codovar, @ x \u003d Mennyiség a törölve Az asztali raktárban beállítja a --OVAR UPDATE STORE SET maradékot \u003d maradékot [E-mail védett] Ahol a codtowder [E-mail védett] Vége. 14.3. Példa. A felvétel eltávolításának feldolgozásához az asztalról

14.4. Példa. Hozzon létre egy ravaszt, hogy feldolgozza a felvételi módosítás műveletét az ügylet táblázatában, például egy ilyen parancs segítségével:

minden olyan tranzakcióban, amelynek olyan terméke van, amelynek kódja van, csökkenti az áruk mennyiségét 10 egységgel.

A megadott parancs több bejegyzéshez vezethet a tranzakció táblázatában. Ezért megmutatjuk, hogyan lehet létrehozni egy trigger feldolgozást, nem egy rekordot. Minden egyes megváltozott felvételhez az áruk egyensúlyát a raktáron lévő áruk értékének értékével és a termék új (utáni változásának) értékével kell csökkenteni a termék értékére és az új ( A termékkód megváltoztatása után az egyensúly növelése az új (változás után) nagyságrendjében. Az összes megváltozott rekordok kezeléséhez írja be a kurzorokat, amelyekben minden régi (a törölt táblázatból) és az összes új értéket (a behelyezett táblázatból) mentheti.

Hozzon létre trigger trigger_upd-t a tranzakcióra a frissítéshez @X int, @x_old int, @y int, @y_old int - kurzor, a CURSTOR SELECT CODOKAR, a SELECTED CODOVAR SELECTED - CURSOR AND RENDED CURSOR Válassza ki a Codovar lehetőséget, a mennyiséget a törölt Cur1 nyitott Cur2-ről - Mozgás párhuzamosan mindkét esetben a Cur1-től a @x kurzorokba, @y letöltötte a Cur2-től a @x_old, @@ Fetch_Status \u003d 0 kezdődik Csökkenti - megszerezte a raktárkészlet raktárkészlet-készletét \u003d maradékot [E-mail védett]_old, ahol Kodtower [E-mail védett]_old - egy új termékkód esetében, ha nincs ilyen termék raktáron, akkor új rekord van beírva, ha nem létezik (válassza a * menüpontot, ahonnan Kodtovar Warehouse [E-mail védett]) Helyezzen be raktárba (Codovar, maradék) értékek (@ x, @ y) másokliner egy új termékkód esetén növeli a raktáron frissített raktárkészlet-készletet \u003d maradékot [E-mail védett] Ahol a codtowder [E-mail védett] Fetch Következő a Cur1-től a @x, @y letöltötte a következő Cur2 Inte @x_old, @y_old End Close Cur1 Bezárás Cur2 Deallocal Cur1 Deallocate Cur2 14.4. Példa. Az asztal rögzítési módosításának feldolgozásához

A figyelembe vett triggerben nincs összehasonlítása az áruk számának, amikor a tranzakció rekordjának változása a raktárban található maradékkal.

14.5. Példa. Javítsuk meg ezt a hibát. Hibaüzenet létrehozásához használja az MS SQL Server RaisError parancsot a trigger testben, amelyek érvei az üzenet szövege, a súlyossági szint és a hiba állapota.

Alter trigger trigger_upd a tranzakció a frissítés, mint deklare @x int, @x_old Int, @y int, @y_old int, @ @ @ @y_old int, @ Int deklare cur1 kurzor a kiválasztott kodsó, mennyiség a beillesztett kijelentés Curs2 kurzor a kiválasztott Codovar , A töröltetlen nyitott cur1 nyitott cur2 nyitott cur2-t a Cur1-től a @x, @y letöltötte a Cur2-től a @x_old, @@s_old, @@ Fetch_Status \u003d 0 kezdődik a @ o \u003d maradék kiválasztása [E-mail védett] Ha @o.<[E-mail védett] Kezdődik a raiserror ("rangered", 16.10) bezár Cur1 Cur2 Deallocate Cur1 Deallocal Cur22 Rollback TRAN RETURN UND UPDATE WALKE SET PALE \u003d maradék [E-mail védett]_old, ahol Kodtower [E-mail védett]_old, ha nem létezik (válassza a * SELECT * A Warehouse Whery Codovar-tól [E-mail védett]) Helyezzen be raktárba (kódfeldolgozás, maradék) értékek (@ x, @ y) más frissítés beállítása raktári maradék \u003d maradék [E-mail védett] Ahol a codtowder [E-mail védett] Fetch Következő a Cur1-től a @x, @y letöltötte a következő Cur2 Inte @x_old, @y_old End Close Cur1 Bezárás Cur2 Deallocal Cur1 Deallocate Cur2 14.5. Példa. Korrigált trigger verzió a felvételi változások feldolgozásához az asztalon

14.6. Példa. A példában az összes változtatás törlése akkor következik be, ha lehetetlen, hogy legalább egyikük legyen. Hozzon létre egy ravaszt, amely lehetővé teszi, hogy csak néhány rekordot változtatjon, és végezze el a változást a többieknél.

Ebben az esetben a trigger nem kerül végrehajtásra a felvételek megváltoztatása után, hanem a módosítási parancs helyett.

Alter trigger trigger_upd az átvitel helyett Update Update, mint deklare @x int, @k_old int Declare @x int, @x_old int, @y int deklare @y_old int, @ IN INT deklare cur1 kurzor a kiválasztott kódok, a kodtovar, a behelyezett mennyiség Cur2 kurzor a kiválasztott kódok, Kodtovar, Mennyiség a törölt nyitott Cur1 nyitott Cur2 Fetch Következő a Cur1 @ K, @ X, @Y letöltve Következő Cur2 a @ k_old, @ x_old, @y_old, míg @@ Fetch_Status \u003d 0 kezdődik o \u003d maradék a WoVel Kodtovarból [E-mail védett] Ha @o\u003e [E-mail védett] Kezdődik a raiserror ("Change", 16.10) frissítés tranzakciós készlet [E-mail védett], Termékkód [E-mail védett] Holtelka [E-mail védett] Update Warehouse Set maradék \u003d maradék [E-mail védett]_old, ahol Kodtower [E-mail védett]_old, ha nem létezik (válassza a * SELECT * A Warehouse Whery Codovar-tól [E-mail védett]) Helyezzen be raktárba (kódfeldolgozás, maradék) értékek (@ x, @ y) más frissítés beállítása raktári maradék \u003d maradék [E-mail védett] Ahol a codtowder [E-mail védett] Vége más mai forralror ("rekord nem változott", 16.10) Következő a következő Cur1 @ K, @ x, @y eljött a következő Cur2 @ k_old, @ x_old, @y_old vége zárja Cur1 bezár Cur2 14.6. Példa. Egy kiváltó, amely lehetővé teszi, hogy törölje csak néhány rekordot, és elvégezze a változást a többi.

Ez vonatkozik:SQL Server (2008-ban kezdődött) SQL AZURE PACK SQL AZUREPARALLEL DATA raktáradatbázis

Létrehoz egy adatfeldolgozó trigger, DDL vagy bemenet. A trigger egy különleges típusú tárolt eljárás, amelyet automatikusan elvégeznek, amikor egy esemény az adatbázis-kiszolgálón történik. Az adatfeldolgozó triggereket olyan események végzik, amelyeket egy felhasználó megpróbál az adatfeldolgozó nyelv használatával megváltoztatni. A DML események beillesztése, frissítése vagy törlése az asztalra vagy reprezentációra vonatkozik. Ezek a triggerek akkor indulnak ki, ha bármilyen érvényes eseményt indít, függetlenül attól, hogy befolyásolja-e az asztal sorát.

A DDL triggerek számos adatleíró nyelvre (DDL) válaszolnak. Ezek az események elsősorban megfelelnek a Transact-SQL létrehozásához, módosításához, cseppek, és bizonyos rendszerüzletek, amelyek hasonlóak a DDL műveletekhez. A bemeneti triggerek az egyéni munkamenetek telepítése során előforduló bejelentkezési eseményre válaszolhatók. A triggerek közvetlenül létrehozhatók a Tranzact-SQL utasításokból vagy a Microsoft .NET-keretrendszerek (CLR) és az SQL Server példányához képest. Az SQL Server lehetővé teszi, hogy több oktatáshoz több triggert hozzon létre.

SQL Server Syntax - trigger egy betét, frissítés vagy törlése az asztalhoz vagy nézethez (DML trigger) létrehozása [vagy Alter] trigger [Schema_Name. ] Trigger_name on (Asztali | nézet) [VAL VEL [, ... n]] (| Után | helyett) ([Insert] [,] [frissítés] [,] [törlés] [,] [Törlés]) [APPEND] [APPENCE] [NEM a replikációra] (SQL_STATUMENTIMENT [, ... N] Külső név } :: \u003d [titkosítás] [záradékként] :: \u003d összeszerelés_name.class_name.method_name.

SQL Server Syntax - A táblázat beillesztése, frissítése vagy törlése egy táblázatba (DML táblák) létrehozása [vagy Alter] trigger [Schema_Name. ] Trigger_name on (táblázat) [a [, ... n]] (AD utána) ([INSERT] [,] [UPDATE] [,] [TELJESÍTMÉNY]), mint (sql_statement [;] [, ... N]) :: \u003d [native_compilation] [Schemabinding] [záradék végrehajtása]

Trigger a létrehozása, módosítása, csepp, támogatja, tagadja, visszavonja vagy frissítési nyilatkozat (DDL trigger) létrehozása [vagy alter] trigger trigger_name on (minden kiszolgáló adatbázis) [ [, ... n]] (Azután) (Event_Type | Event_Group) [, ... n] mint (SQL_STATUMENT [;] [, ... N] Külső név< method specifier > [ ; ] }

Trigger a bejelentkezési eseményen (Logon trigger) létrehozása [vagy Alter] trigger trigger_name minden kiszolgálón [ [, ... n]] (a | utána) bejelentkezés (sql_statement [;] [, ... n] Külső név< method specifier > [ ; ] } :: \u003d [titkosítás] [záradékként]

Windows Azure SQL adatbázis-szintaxis - A beillesztés, frissítés vagy törlés kijelentése táblázathoz, frissítéshez vagy törlési utasításhoz (DML trigger) [vagy Alter] trigger létrehozása [Schema_Name. ] Trigger_name on (Táblázat | Nézet) [ [, ... n]] (a | után | helyett) ([insert] [insert] [,] [UPDATE] [,] [TELJESÍTMÉNY]), mint (sql_statement [;] [, ... n] [;] ) :: \u003d [záradék végrehajtása]

Windows Azure SQL Database Syntax - triggert CREATE, ALTER, DROP, GRANT tagadja, visszavonja, vagy frissítse STATISZTIKA NYILATKOZAT (DDL Trigger) CREATE [OR ALTER] ravaszt trigger_name ON (Database) [A [, ... n]] (azután) (Event_Type | Event_group) [, ... n] (sql_statement [;] [, ... n] [;]) :: \u003d [záradék végrehajtása]

A kiváltás csak akkor változtatja meg a ravaszt, ha már létezik.

schema_Name.
A diagram neve a DML triggerhez tartozik. A DML Trigger akció az asztal vagy ábrázolás asztalterületére korlátozódik, amelyre létrehozzák őket. schema_Name. Nem lehet megadni a DDL triggerekhez vagy a bemenethez.

nAME_TRIGGER
A ravaszt neve. Egy tárgy nAME_TRIGGER meg kell felelnie a szabályoknak, kivéve ezt nAME_TRIGGER Nem lehet kezdeni a # vagy ## karakterekkel.

asztal | kILÁTÁS.
Egy táblázat vagy ábrázolás, amelyben a DML triggeret elvégzik, néha trigger asztalként vagy trigger reprezentációnak jelzi. Megjegyzés A megadott táblázat neve vagy benyújtása nem kötelező. A Triger helyett csak a prezentációra utalhat. A DML triggerek nem írhatók le helyi vagy globális ideiglenes táblázatokban.

Adatbázis.
Alkalmazza a DDL trigger hatókörét az aktuális adatbázisba. Ha megadja, akkor a trigger működik, ha esemény típus. vagy event_Group az aktuális adatbázisban fordul elő.

A DDL trigger hatóköre vagy a belépési trigger az aktuális kiszolgálóra vonatkozik. Ha megadja, akkor a trigger működik, ha esemény típus. vagy event_Group Az aktuális szerveren bárhol van hely.

Sötétíti a létrehozási trigger utasítás szövegét. A titkosítási paraméterrel nem teszi lehetővé az SQL Server replikáció részeként való megjelenítését. A titkosítási paraméterrel nem lehet megadni a CLR triggerek számára.

Végrehajtja.
Megadja a biztonsági kontextust, amelyben a ravaszt végzik. Lehetővé teszi, hogy kezelje az SQL Server példány által használt felhasználói fiókot, hogy ellenőrizze az engedélyt bármely adatbázis objektumra hivatkozó objektumokra.

További információ: Fejezet.

Natív_compiláció
Azt jelzi, hogy a trigger saját kódjában áll.

Ez a paraméter kötelező a memóriához optimalizált táblázatok kiváltására.

Schembinding.
Biztosítja, hogy a trigger által hivatkozott táblázatok nem távolíthatók el vagy módosíthatók.

Ez a paraméter kötelező a memóriához optimalizált táblázatok kiváltására, és nem támogatott a hagyományos táblázatokban.

Mert | Utána
Azután típusa azt jelzi, hogy a DML trigger csak azután, hogy sikeresen végrehajtja az összes műveletet az SQL utasításban, amelyet egy ravaszt indít. Minden kaszkád cselekvés és ellenőrzések, amelyek korlátozásokat kell találni, amelyekre egy kapcsolat van, sikeresen befejezni kell, mielőtt a trigger fog működni.

Ha az egyetlen megadott kulcsszó az, akkor a utánzó argumentumot alapértelmezés szerint használják.

A kiváltók után az ötletek nem definiálhatók.

Ahelyett.
Azt jelzi, hogy a DML trigger végrehajtásra kerül helyette Az SQL utasítás futtatása ezért felülírja a kezdő utasítások műveletét. Az argumentum helyett nem lehet megadni a DDL triggerek vagy a belépési triggerek számára.

Minden egyes betéthez, frissítéséhez vagy törléséhez az utasításban az asztalon vagy nézetben nem lehet meghatározni, mint egy trigger helyett. Azonban lehetséges meghatározni azokat a nézeteket, amelyekről a nézetekről van szó, ahol minden nézetnek van saját trigerje helyett.

A triggerek helyett a beadványok alátámasztása nem engedélyezett az ellenőrző opció paraméterrel. Az SQL Server hibát okoz, ha a trigger helyett a Támogatási támogatással van hozzáadva az Ellenőrző opció paraméterével. A felhasználónak törölnie kell ezt a paramétert az ALTER Nézet utasításával, mielőtt meghatározná a Triggerg astead-ot.

([Törlés] [,] [Insert] [,] [Update])
Meghatározza azokat az adatokat, amelyekre a DML trigger aktiválódik, ha az asztalra vagy reprezentációra vonatkozik. Legalább egy utasítást kell megadnia. A ravaszt definíciójában bármely kombináció bármely sorrendben megengedett.

Ahelyett, hogy a törlési paraméter helyett nem engedélyezett olyan táblázatokban, amelyek referenciakapcsolattal rendelkeznek a Törlésen található lépcsőzetes hatással. Hasonlóképpen, a frissítési paraméter nem engedélyezett olyan táblázatokban, amelyek referenciakapcsolattal rendelkeznek a frissítéssel kapcsolatos kaszkád hatással.

Azt jelzi, hogy meglévő típusú trigger szükséges. Az Append argumentummal nem használható a triggerek helyett, vagy kifejezetten meghatározza a ravaszt. A mellékletes argumentum csak akkor használható, ha a paramétert anélkül adja meg, hogy a visszafelé kompatibilitási támogatás célja helyett vagy után. Az Append argumentummal nem lehet megadni, ha a külső névparaméter megadása (CLR trigger esetében).

esemény típus.
A Tranzact-SQL nyelvi esemény neve, amely végrehajtás után a trigger DDL trigger. A DDL triggerekre vonatkozó érvényes események szerepelnek.

event_Group
A Standard Tranzact-SQL nyelvi eseménycsoport neve. A DDL Trigger bármely tranzakciós-SQL nyelvi események végrehajtása után indul ki event_Group. A DDL triggerek rendezvénycsoportjainak listája szerepel.

A munka befejezése után a hozzárendelési útmutató létrehozása event_Group Makrófunkcióként is, hozzáadva a megfelelő típusok eseményeit a sys.trigger_events könyvtárnézethez.

Nem replikációra

Azt jelzi, hogy a trigger nem hajtható végre, ha a replikációs ügynök megváltoztatja a trigger által használt táblát.

sql_statement.
A trigger feltételei és cselekedései. A ravasztási feltételek olyan további kritériumokat jeleznek, amelyek meghatározzák, hogy mely események - DML, DDL vagy bemeneti esemény - kiváltó indítás.

A tranzakciós-SQL nyelvi utasításokban meghatározott kiváltó műveletei hatályba lépnek a művelet használatának megpróbítása után.

A trigerek bármilyen típusú tranzakciós-SQL-nyelvet tartalmazhatnak bizonyos kivételek esetén. További információért lásd: "Megjegyzések" alszakasz. A triggereket úgy tervezték, hogy szabályozzák vagy módosítsák az adatokat módosítási vagy adatmeghatározási utasítások alapján; Nem adnak adatokat a felhasználónak. A Tranzact-SQL gyakran tartalmaz utasításokat a triggerben Áramlásvezérlő nyelv.

A DML triggerek logikai (fogalmi) táblákat használnak, törölve és feletkeznek. Szerkezete szerint hasonlóak azok az asztalhoz, amelyen a trigger definiálódik, vagyis az a táblázat, amelyre a felhasználói művelet vonatkozik. A törölt és feletkezett táblázatok régi vagy új sor értékeket tartalmaznak, amelyeket felhasználói műveletekkel megváltoztathatunk. Például az utasításokat a törölt táblázat összes értékére kérheti:

Válassza a * törölve;

További információ: Fejezet.

A DDL triggerek és bejelentkezési információk gyűjteménye a funkció használatával futó eseményekről. További információ: Fejezet.

SQL Serverells frissítés szöveg, nTEXT.vagy kép Az oszlop aktiválja a táblázatok vagy ábrázolások helyett.

Az egyedi optimalizált táblákban optimalizálták sql_statement. Megengedett az atom egység felső szintjén. Az Atomic T-SQL blokk belsejében engedélyezett, a T-SQL saját eljárásaiban korlátozódik.

< method_specifier >

Jelzi a CLR-triggerhez való kötődés összeszerelési módját. Ez a módszer nem kaphat érveket és visszatérési érvénytelen értékeket. osztály név. Érvényes SQL Server azonosítónak kell lennie, és létezik osztályként az összeszerelésben. Ha az osztálynak van egy neve, amely pontokat tartalmaz (.) A névtérrészek elválasztásához az osztály nevét négyzet alakú zárójelben () vagy kettős idézőjelekbe kell foglalni (""). Az osztály nem lehet beágyazódni.

A DML triggereket gyakran használják az üzleti szabályok és az adatok integritás alkalmazására. Az SQL Server deklaratív referencia-integritás-korlátozás az ALTER TÁBLÁZAT, ÉS A TÁBLÁZAT ÚTMUTATÁSOK. Azonban a referencia-integritás deklaratív korlátozása nem nyújt referencia-integritást az adatbázisok között. A referencia-integritás korlátozása magában foglalja az asztalok elsődleges és külső kulcsai közötti kommunikációs szabályok végrehajtását. A referencia-integritás korlátozásainak engedélyezéséhez használja az elsődleges kulcsot és az FORGN kulcsot az ALTER táblázatban, és hozzon létre asztaltáblát. Ha a korlátozások a trigger asztalra vonatkoznak, akkor azokat ellenőrizzük, miután az Astead-ot a kiváltó aktiválják, és mielőtt végrehajtaná az utóindítót. A korlátozás megsértése esetén a trigger cselekedeteit ahelyett, és a kiváltó után nem működik.

Az első és az utolsó triggerek után, amelyet a táblázatban végeznek, az SP_SETTRIGERODER ELJÁRÁS használatával lehet meghatározni. A táblázathoz csak egy első és egy utolsó indítót határozhat meg az egyes betét, frissítés és törlés érdekében. Ha a táblázatban lévő kiváltók után mások vannak, véletlenszerűen végrehajtásra kerülnek.

Ha az alter ravaszt utasítás megváltoztatja az első vagy az utolsó ravaszt, az első vagy utolsó attribútumok a módosított ravaszt kell hagyni, és a rendezési sorrendet kell beállítani a SP_SETTRIGGERORDER eljárást.

A trigger után csak az SQL utasítás sikeresen befejeződött az indítás után. A sikeres megvalósítás magában foglalja az összes referencia-kaszkád cselekvés befejezését és a módosított vagy távoli objektumokhoz kapcsolódó korlátozások ellenőrzését. A kiváltó után nem okozza a Conförtive kiváltó trigger helyett ugyanabban az asztalnál.

Ha a táblázat helyett a táblázat helyett a táblázatban szerepel, bármely olyan utasítással rendelkezik, amely ismételten okozott a kiváltóválaszot, a trigger nem rekurzív módon hívott. Ehelyett az utasítás feldolgozásra kerül, mintha a táblázat nem volt konfigurációja ahelyett, és a korlátozások sorrendje megkezdődik és végrehajtja az utólagos triggeret. Például, ha egy trigger a táblázat beillesztése helyett van meghatározva, és ugyanazon a táblázatban beilleszti az utasításokat, akkor a betét utasítás nem okoz új trigger működést. A trigger által végzett beillesztési parancs megkezdi az ebbe a táblázathoz definiált beillesztési triggerek mindegyikének korlátozását és platformját.

Ha az előadás helyett ahelyett, hogy a prezentációhoz úgy dönt, hogy bármilyen olyan utasításra vonatkozik, amely szerint az űrkutató helyett a trigger újra reagál, a ravaszt nem rekurzív módon hívják. Ehelyett az utasítás megváltoztatja az alapvető táblákat, amelyeken a nézet alapul. Ebben az esetben a definíciónak meg kell felelnie a frissített ábrázolásokra vonatkozó valamennyi korlátozásnak. A frissített nézetek meghatározása, lásd a részt.

Például, ha a trigger a frissítés helyett a frissítési utasítás ugyanarra a nézetre törekszik, a trigger által végrehajtott frissítési utasítás nem okoz új trigger műveletet. A triggerben végrehajtott frissítési utasítás az ötletet úgy tervezi, mintha a bemutató nem volt a ravaszt helyett. A frissítési utasítással módosított oszlopok egy alapvető táblához tartoznak. Az alaptáblázat minden módosítása a korlátozások sorozata és a válasz után a válasz után a válasz.

Ellenőrizze a műveletek frissítését, vagy helyezze be az utasításokat a megadott oszlopokra

A Transct-SQL trigger konkrét műveleteket hajthat végre bizonyos oszlopok frissítésével, frissítési vagy beillesztési utasításokkal. Erre a célra használ. A frissítés () design ellenőrzi a frissítést, vagy beilleszti az utasításokat egy oszlopon. Az oszlopok használata_updated design, a több oszlopon végzett frissítés vagy beillesztés utasításai ellenőrzése, és egy bitsablon visszaküldése, amely megmutatja, hogy mely oszlopok vannak beillesztve vagy frissítve.

Trigger korlátozások

A létrehozási trigger utasításnak az első utasításnak kell lennie a csomagban, és csak egy asztalra lehet alkalmazni.

A ravaszt csak az aktuális adatbázisban hozták létre, de mindazonáltal tartalmazhat hivatkozásokat az aktuális adatbázison kívüli tárgyakra.

Ha a diagram nevét megadja a trigger finomítása érdekében, az asztal nevét ugyanúgy tisztázni kell.

Ugyanazt a trigger művelet által meghatározott egynél több felhasználói művelet (például, INSERT és UPDATE) ugyanabban a CREATE TRIGGER utasítást.

A törlés / frissítés helyett a triggerek nem definiálhatók olyan táblázathoz, amely egy külső kulcsot tartalmaz a Törlés / Frissítés műveletének lépcsőzetes végrehajtásához.

A trigger belsejében bármely beállított utasítás használható. A kiválasztott beállított paraméter a trigger végrehajtása során hatályban marad, amely után a beállítások visszatértek az előző állapotba.

A trigger trigger során az eredményeket a hívó alkalmazás, valamint a tárolt eljárások esetében visszaküldi. Hogy megakadályozzák a kapott kiváltó a ravaszt, a visszatérő eredményeket visszatérő nem kell tartalmaznia a SELECT utasításokat, hogy visszatérjen az eredmény, vagy az utasításokat, amelyek végrehajtódnak a ravaszt hozzárendelése változók. Trigger, amely tartalmazza azokat az utasításokat, amelyek az eredményeket visszaadják az eredményeket a felhasználókhoz vagy utasításhoz, amelyek hozzárendelnek, speciális keringést igényelnek; Ezeket a visszaküldött eredményeket felül kell írni minden olyan alkalmazásra, amelyben a trigger táblázat megváltozik. Ha a trigger változó hozzárendelései, akkor a SET NOCOUT nyilatkozatot a trigger elején kell használni, hogy megakadályozzák az eredménykészleteket.

Bár a csonkított asztali utasítás lényegében a törlési utasítás, nem aktiválja a ravaszt, mivel a művelet nem rögzíti az egyes vonalak eltávolítását. Mindazonáltal aggódni kell a törlési trigger véletlen törése miatt, csak a felhasználók jogosultságokkal rendelkeznek a csonkolási táblázat végrehajtásához.

Utasítás WriteText (naplózás és anélkül) nem indul elindítást.

A következő tranct-SQL nyelvi utasítások nem engedélyezettek a DML triggerekben:

A DDL triggerek, valamint a szabványos kiváltók, a tárolt eljárásokat bármely eseményre válaszolva. A szabványos kiváltóktól eltérően a frissítés végrehajtására, az asztalra vagy reprezentációra vonatkozó utasítások végrehajtására válaszolnak. Ehelyett a triggereket először az adatmeghatározás nyelvi utasításaira (DDL) válaszolják. Ezek az utasítások létrehozása, megváltoztatása, csökkenése, támogatása, tagadja, visszavonja és frissíti a statisztikákat. Rendszer tárolt eljárások A műveletek, mint például a DDL műveletek is futtathatják a DDL triggereket.

A DDL triggerekről további információkért lásd: Fejezet.

A DDL triggerek nem váltanak ki a helyi vagy globális ideiglenes táblázatok és tárolt eljárásokat érintő eseményekre.

A DML triggerekkel ellentétben a DDL triggerek nem korlátozódnak a séma területre. Ezért a kérelem metaadatokat DDL triggerek, akkor nem használhatja az ilyen funkciókat object_id, object_name ObjectProperty ObjectPropertyex. Használja a könyvtár bemutatását. További információ: Fejezet.

A bemeneti trigák a tárolt eljárásokat a bejelentkezési eseményre válaszolják. Ezt az eseményt az egyéni munkamenet SQL Server példányával való telepítésekor hívják. A bemeneti triggerek a bejelentkezéskor a hitelesítési fázis befejezése után indulnak ki, de a felhasználói munkamenet valójában létrehozása előtt. Következésképpen az összes üzenetet, hogy előfordulnak a ravaszt általában eléri a felhasználó, mint például a hibaüzenetek és üzenetek a PRINT utasítás átirányítja az SQL Server error log. További információ: Fejezet.

Ha a hitelesítés sikertelen, a bemeneti triggerek nem indulnak meg.

A bemeneti triggerek nem támogatott tranzakciók. Ha az elosztott tranzakciót tartalmazó beléptető trigger akkor indul, 3969 hiba kerül vissza.

A bejárati trigger kikapcsolása

A bemeneti trigger hatékonyan letilthatja az adatbázis-motor komponenshez az összes felhasználó számára, beleértve az előre definiált kiszolgáló szerepének tagjait is. sysadmin. . Ha a bemeneti trigger tiltja a kapcsolatokat, az előre meghatározott kiszolgáló szerepének tagjait sysadmin. Csatlakoztatható egy kiválasztott adminisztrációs kapcsolat segítségével, vagy az adatbázis-motor komponensnek a minimális konfigurációs módban (-F) hívásával. További információ: Fejezet.

Visszatérési eredmények

A triggerek eredményeinek visszatérési képességét kizárják az SQL Server következő verziójából. A kapott készletek visszaküldése váratlan viselkedéshez vezethet, amelyek nem szándékoznak velük dolgozni. Ne használja kiváltó fejlett alkalmazások, amelyek visszatérő eredmény határozza meg, és a menetrend változása használó alkalmazások jelenleg számukra. Az eredmények visszaküldéséhez állítsa az 1 értéket.

A bemeneti triggerek mindig megtiltják a kapott készletek visszatérítését, és ezt a viselkedést nem lehet konfigurálni. Ha a bemeneti trigger létrehoz egy eredményt, akkor a ravaszt nem hajtják végre, és tilos a kiváltó által okozott belépési kísérlet.

Néhány kiváltó

Az SQL Server lehetővé teszi, hogy több DML, DDL és bejelentkezési eseményhez több triggert hozzon létre. Például, ha a frissítési kézikönyv létrehozási triggerje egy olyan táblázatban történik, amely már frissítési triggerrel rendelkezik, a frissítési trigger is létrejön. Az SQL Server korábbi verzióiban csak egy trigger volt megengedett minden táblázatban minden egyes adatcsere-beillesztés, frissítés vagy törlés.

Rekurzív kiváltók

Az SQL Server lehetővé teszi rekurzív trigger hívását, ha az ALTER adatbázis utasításait használja, a RECURSVE_TRIGGERS beállítás engedélyezve van.

A rekurzív kiváltók során a következő típusú rekurziók léphetnek fel:

    Közvetett rekurzió

    Közvetett rekurzióval az alkalmazás frissíti a T1 táblát. Ez az esemény TR.1 trigger kiváltást okoz, amely frissíti a T2 táblázatot. Ez okozza a T2 trigger kiváltását és a T1 asztal frissítését.

    Közvetlen rekurzió

    A közvetlen rekurzióval az alkalmazás frissíti a T1 táblát. Ez az esemény okozza a TRI1 trigger választ, amely frissíti a T1 táblát. Mivel a T1 tábla már frissült, a trigger ismét és így tovább.

A következő példa mindkét rekuriót használ: egyenes és közvetett. Tegyük fel, hogy a T1 táblázat két triggert határoz meg: TR1 és TR2. TR1 trigger rekurzívan frissíti a T1 táblát. Az Update utasítás mindegyikét a TR1 és a TR2 kiváltóinak egyszer végzi. Ezenkívül a trigger tri1 trigger trigger trigger trigger (rekurzívan) és tr2. A beillesztett és törölt trigger táblák olyan vonalakat tartalmaznak, amelyek csak a trigger trigger által okozott frissítési utasításokra vonatkoznak.

Tiltsa le a RECURSVE_TRIGGERS A beállítások csak a közvetlen rekurzolást megakadályozzák. A közvetett rekurzió letiltásához az SP_CONFIGURE tárolt eljárással hozzárendelje a beágyazott triggerek kiszolgálót 0-ra.

Ha az egyik trigger végrehajtja a visszamaradt tranzakciós utasításokat, nincs más triggerek, függetlenül a fészkelő szinttől, nem indulnak ki.

Beágyazott triggerek

A kiváltó fészkelés elérheti a maximális 32 szintet. Ha a trigger megváltoztatja azt a táblázatot, amelyhez egy másik trigger van meghatározva, akkor a második trigger indul, ami a harmadik, stb. Ha a lánc bármelyikének bármelyike \u200b\u200bbekapcsolja a végtelen ciklust, a fészkelési szint meghaladja a megengedett határértéket, és a kiváltó válasz törlődik. Ha a TRANSACT-SQL ravaszt végez ellenőrzött kódot utalás a módszer, típusát vagy statisztikai funkciója a CLR környezetben ezt a linket tartják az egyik a megengedett 32 fészkelő szinten. A kezelt kódból eredő módszerek nem vonatkoznak e korlátozás hatálya alá.

A beágyazott triggerek megszakításához állítsa be a 0 értéket beágyazott triggerek paraméter SP_Configure eljárás. Az alapértelmezett konfigurációban megengedettek a beágyazott triggerek. Ha a mellékelt kiváltó le vannak tiltva, rekurzív kiváltó lesz tiltva, függetlenül a recursive_triggers beállítás telepíthető a Alter Database utasítást.

Az első bekapcsolódott kiváltó után, a kivágás helyett, még akkor is, ha beágyazott triggerek A kiszolgáló konfigurációs paramétere 0-ra van állítva. Ezzel a paraméterértékkel azonban a későbbi triggerek nem indulnak ki. Javasoljuk, hogy ellenőrizze a beágyazott triggerek alkalmazásait annak megállapításához, hogy az alkalmazások megfeleljenek az üzleti szabályoknak beágyazott triggerek A kiszolgáló konfigurációs paramétere 0, és megfelelő változtatásokat végez.

A nevek késleltetett értelmezése

Az SQL Server tárolt eljárásokat, kiváltókat és csomagokat szolgáltatott a Tranzact-SQL nyelven, amely olyan táblázatokra vonatkozik, amelyek nem léteznek az összeállítás időpontjában. Az ilyen lehetőséget halasztott név értelmezésnek nevezik.

A DML trigger létrehozásához módosíthatja az olyan táblázathoz vagy reprezentációhoz való engedélyezést, amelyben a trigger létrehozása.

Ahhoz, hogy hozzon létre egy DDL ravaszt cselekvési területen belül a szerver (az All Server), vagy a bejelentkező ravaszt igényli Control Server engedélyt a szerverre. Ahhoz, hogy hozzon létre egy DDL ravaszt egy láthatósági belül egy adatbázishoz (Database), az Alter olyan adatbázis DDL trigger engedély szükséges az aktuális adatbázist.

A. DML trigger használata figyelmeztető üzenettel

A következő DML trigger üzenetet küld az ügyfélnek, ha valaki megpróbálja hozzáadni vagy módosítani az adatokat az Ügyfél táblázatban az AdventureWorks2012 adatbázisban.

Hozzon létre trigger reminder1-et az értékesítéskor.Customer betét után, frissítse a RaisError-t ("Értesítse az ügyfélkapcsolatokat", 16, 10); Megy.

B. DML trigger használata e-mailben küldött figyelmeztető üzenet segítségével

A következő példában a megadott felhasználó (Marym) e-mail üzenetet küld az üzenet, amikor az ügyfél táblázat megváltozik.

Hozzon létre trigger reminder2-et az értékesítéskor.Customer a beillesztés után, frissítse, törölje a exec msdb.dbo.sp_send_dbmail @profile_name \u003d "AdventureWorks2012 adminisztrátor", @Recipients \u003d " [E-mail védett]", @Body \u003d "Ne felejtsd el, hogy jelentést nyomtat az értékesítési erőért.", @subject \u003d "Emlékeztető"; Megy.

B. A DML után Trigger kényszerű alkalmazása Üzletszabályzata között PurchaseOrderHeader és Forgalmazó asztalok

Mivel az ellenőrzési korlátozás csak olyan oszlopokra vonatkoztathat, amelyekre az oszlopok vagy táblázat korlátozása meghatározásra kerül, meghatározások (ebben az esetben az üzleti szabályt) a triggerek formájában kell meghatározni.

A következő példa létrehoz egy DML triggeret az AdventureWorks adatbázisban. Ez a trigger a beszállító hitelképességének ellenőrzését végzi, hogy jó (nem 5), ha megpróbál új beszerzési megrendelést helyezni a vásárlási adományozó táblázatban. A szállító hitelképességéről való tájékoztatás esetén az eladó asztalra vonatkozó hivatkozás szükséges. Túl alacsony hitelképesség esetén a megfelelő üzenet jelenik meg, és a betét nincs végrehajtva.

Ez a kiváltó megakadályozza, hogy egy sor beillesztésre kerüljön a vásárlást.PurchaseorderHeader táblázatba - Ha a megadott szállító hitelminősítése 5-re van állítva (átlag alatt). Hozzon létre trigger vásárlást.Lowcredit a vásárláskor.purchaseorderheader a beillesztés után, mintha létezik (válassza ki a * vásárlástól a vásárlástól. PurchaseorderHeader, mint P csatlakozik a beillesztetthez, akkor i a p .burchaseorderiD \u003d i v.creditring \u003d 5) kezdődik a raiserror ( "A szállító" hitelminősítése túl alacsony az új vásárlási megrendelések elfogadásához. ", 16 , 1 ); Visszavonás tranzakció; Visszatérés. Vége; Megy. - Ez az állítás megpróbálja beilleszteni egy sorba a vásárlási adagolóasztalba - olyan szállító számára, amelynek átlagos hitelminősítése van. - A betétkapcsoló után a beillesztés után kerül ki, és a beszúrási tranzakció visszahúzódik. Helyezze be a vásárlást.Purchaseorderheader (RevizionNumber, Status, Munkaid, Vendorid, Hajógyártás, Sorrendátum, Hajózás, Subtotal, Taxamt, Freight) értékek (2, 3, 261, 1652, 4, GetDate (), GetDate (), 44594,55, 3567.564, 1114.8638); Megy.

A DDL DDL trigger használata

A következő példában a DDL trigger az adatbázis szinonimáinak megakadályozására szolgál.

Hozzon létre trigger biztonságot az adatbázisban a DROP_SYNONMA-hoz RaisError ( "Letiltja a" Biztonság "kiváltást a szinonimák csökkenéséhez!", 10, 1) Rollback GO DROCK TRIGGER SACCIONY az adatbázisban; Megy.

D. A kiszolgáló DDL trigger használata

A következő példában a DDL trigger egy üzenet megjelenítésére szolgál, ha a kiszolgáló ezen példányánál fordul elő, és az EventData funkciót a tranzakciós-SQL megfelelő utasításának szövegének megszerzésére használják. További példák az EventData funkció használatára a DDL triggerekben.

Hozzon létre trigger DDL_TRIG_DATABASE az összes kiszolgálón a CREATE_DATABASE Mint "adatbázishoz". Válassza az EventData () érték () értéket () "(/ Event_instance / TsqlCommand / CommandText)", "Nvarchar (MAX)") A DDL_TRIG_DATABASE minden kiszolgálón megjelenő DDL_TRIG_DATABASE; Megy.

E. A bejárati trigger használata

A következő példában a belépési trigger megtiltja az SQL Server tag beírását login_test Bemenet, ha már három felhasználói munkamenet van ebben a fiókban.

Használja a Mestert; Megy. Login Login_Test létrehozása jelszóval \u003d "3khj6dhx (0xvysdf" must_change, check_expiration \u003d be; Megy. Grant View Server állapot a LOGIN_TEST-hez; Megy. Hozzon létre trigger Connection_limit_trigger az összes kiszolgálón, ha a "LOGIN_TEST" végrehajtja a bejelentkezést, mint az eredeti_login () \u003d "LOGIN_TEST", és (válassza ki a számot (*) a sys .dm_exec_sessions, ahol IS_USER_PROCESS \u003d 1 és eredeti_login_name \u003d "login_test")\u003e