Visszatérési referencia integritáskorlátozások
A lépcsőzetes referenciális integritási korlátok használatával meghatározhatja az SQL Server által végrehajtott műveleteket, amikor a felhasználó megpróbál eltávolítani vagy frissíteni egy olyan kulcsot, amelyet más meglévő külföldi kulcsok mutatnak.
A CREATE TABLE és ALTER TABLE utasítások REFERENCIÁK záradékai támogatják a DELETE és ON UPDATE utasításokat. A lépcsőzetes műveletek az Idegen kulcs-kapcsolat párbeszédpanel segítségével is meghatározhatók.
Az alapértelmezett NO művelet, ha az ON DELETE és az ON UPDATE záradék nincs megadva.
A TÖRLÉSE NINCS TEVÉKENYSÉG
Azt jelzi, hogy ha megpróbálja törölni egy olyan sort, amelyet a külsõ kulcsok hivatkoznak más táblák soraiban, akkor hibát kell jelentenie, és a DELETE utasításhoz visszahúzza.
ON UPDATE NO ACTION
Azt jelzi, hogy amikor megpróbálja frissíteni a külsõ kulcsok által hivatkozott kulcsértéket a többi táblázat soraiban, hibaüzenetet kell jelentenie, és vissza kell térnie az UPDATE utasításhoz.
Hozzászólások CASCADE, SET NULL DEFAULT SET lehetővé törölni és frissíteni kulcs értékeit befolyásoló táblázatok, amelyek meghatározzák a külső kommunikáció kulcs, ami olyan táblázat, amelyben változtatásokat. Ha a céltáblákon is meghatározták a referenciaműveleteket, akkor ezeket a lépcsőzetes műveleteket a megfelelő sorok frissítése vagy törlése esetén is alkalmazni kell. A CASCADE érték nem határozható meg az időbélyeg oszlopok külső és primer kulcsaira.
A CASCADE TÖRLÉSE
Megadja, hogy amikor megpróbálja törölni a külsõ kulcsokkal hivatkozott kulcsot egy másik táblázatban, akkor az összes idegen kulcsot tartalmazó sorokat is törölni kell.
ON CASCADE UPDATE
Azt jelzi, hogy amikor megpróbálja frissíteni a külsõ kulcsok által hivatkozott kulcsértéket más táblák soraiban, akkor az idegen kulcsot alkotó összes értéket frissíteni kell az új kulcsértékre.
A CASCADE érték nem adható meg, ha egy időbélyeg oszlop egy külső vagy referenciakulcs része.
A TÖRLÉS NULL beállítása
Azt jelzi, hogy ha megpróbálja törölni a külsõ kulcsokkal hivatkozott kulcsot a többi táblázat soraiban, akkor az idegen kulcsokat alkotó összes értéket NULL-ra kell váltani. A korlátozás végrehajtásához a céltábla idegen kulcsainak összes oszlopának NULL-nak kell lennie.
ON UPDATE SET NULL
Azt jelzi, hogy amikor megpróbálja frissíteni a külsõ kulcsok által hivatkozott kulcsértéket a többi táblázat soraiban, akkor az idegen kulcsokat alkotó összes értéket NULL-ra kell változtatni. A korlátozás végrehajtásához a céltábla idegen kulcsainak összes oszlopának NULL-nak kell lennie.
BEFEJEZÉS BEÁLLÍTÁSA
Azt jelzi, hogy amikor megpróbálja törölni egy olyan sort, amelyet idegen kulcsok hivatkoznak más táblák soraiban, akkor az összes olyan értéket, amelyik ezeket a külföldi kulcsokat tartalmazza, át kell változtatni az alapértelmezett értékekre. Annak érdekében, hogy ez a korlátozás teljesüljön, meg kell adni egy alapértelmezett értéket a céltábla idegen kulcsainak összes oszlopához. Ha az oszlop NULL értéket fogad be, és az alapértelmezett értékkészlet nincs kifejezetten beállítva, a NULL az adott oszlop implicit alapértelmezett értéke lesz. A NULL-tól eltérő ON DELETE SET DEFAULT záradék által megadott összes értéknek meg kell felelnie a fő táblának megfelelő értékeknek az idegen kulcskorlát integritásának megőrzése érdekében.
BE UPDATE SET DEFAULT
Azt jelzi, hogy amikor megpróbálja frissíteni egy idegen kulcsok által hivatkozott kulcsértéket a többi táblázat soraiban, akkor az összes olyan érték, amelyik ezeket a külföldi kulcsokat tartalmazza, az alapértelmezett értékre kell váltani. Annak érdekében, hogy ez a korlátozás teljesüljön, meg kell adni egy alapértelmezett értéket a céltábla idegen kulcsainak összes oszlopához. Ha az oszlop NULL értéket fogad be, és az alapértelmezett értékkészlet nincs kifejezetten beállítva, a NULL az adott oszlop implicit alapértelmezett értéke lesz. Az ON UPDATE SET DEFAULT záradék által a NULL-tól eltérő összes értéknek meg kell adnia a megfelelő táblázatban szereplő értékeket, hogy megőrizze az idegen kulcskorlát integritását.
Akció a Törlés CASCADE nem lehet a táblázatban megadott, amelyre az intervenciós határozza törlés helyett. A táblázatok, amelyek meghatározása váltja HELYETT UPDATE, nem adható a következő lépéseket: ON DELETE SET NULL, ON DELETE SET DEFAULT, ON UPDATE CASCADE, ON UPDATE SET NULL ON UDATE SET DEFAULT.
Az egyedi DELETE vagy UPDATE utasítások egy sor lépcsőzetes referenciális műveletet indíthatnak el. Például az adatbázis három táblát tartalmaz: TableA. TableB és TableC. A TableB tábla külső kulcsát az ON DELETE CASCADE művelet határozza meg, és az TableA tábla elsődleges kulcsjához van társítva. A TableC tábla külső kulcsát az ON DELETE CASCADE művelet határozza meg, és a TableB tábla elsődleges kulcsa. Ha a DELETE utasítás eltávolítja a sorokat a TableA táblázatban. ugyanaz a művelet törli az összes sort a TableB táblázatban. amelyben az idegen kulcsok egybeesnek a TableA eltávolított elsődleges kulcsával. majd - a táblázatban található összes táblázat törlése. amelyben az idegen kulcsok egybeesnek a TableB táblázat távoli elsődleges kulcsával.
A különálló DELETE vagy UPDATE utasítások által indított lépcsőzetes referenciális műveletek sorainak kör alakú hivatkozások nélkül kell létrehozniuk a fát. Egyetlen táblázat sem jelenhet meg egyszerre a DELETE vagy az UPDATE utasítások által okozott összes lépcsőzetes hivatkozási művelet listájában. Ezenkívül a lépcsőzetes referenciagazdálkodási fán belül egyetlen elérési útnak kell lennie az érintett táblák bármelyikéhez. A fa bármely ágát megszakítják, amint egy táblázat találkozik, amelyre az ACTION művelet nincs megadva, vagy egyáltalán nem történik művelet.
A lépcsőzetes referencia műveletek az alábbiak szerint indítják el az AFTER UPDATE vagy az AFTER DELETE indításokat:
Minden, közvetlenül az eredeti DELETE vagy UPDATE utasítás által okozott referenciaképes műveletet először hajt végre.
Ha a megváltozott táblázatokhoz tartozó AFTER triggerek vannak megadva, akkor ezek a triggerek az összes lépcsőzetes művelet végrehajtása után lépnek érvénybe. Ezek a triggerek fordított sorrendben lépnek működésbe. Ha egy táblára több trigger van megadva, akkor véletlenszerű sorrendbe kerülnek, hacsak nincs megadva a táblázat első és utolsó triggerje. Ezt a sorrendet a sp_settriggerorder eljárás határozza meg.
Ha a lépcsőzetes műveletek sorozata egy olyan táblázatból származik, amely a DELETE vagy az UPDATE művelet azonnali célpontja, akkor ezeknek a triggereknek a kiviteli sorrendje nincs meghatározva. Azonban az egyik műveletsorozat mindig elindítja az összes triggerjét, mielőtt a következő elkezdi csinálni.
Az AFTER tábla kiváltója, amely a DELETE vagy UPDATE művelet azonnali célpontja, elindul, függetlenül attól, hogy megváltozott-e valamilyen húr. Ebben az esetben az áthaladás nem érinti a többi táblázatot.
Ha az előző triggerek egyike DELETE vagy UPDATE műveletet hajt végre más táblákon, akkor ezek a műveletek saját lépcsőzetes műveleti sorozatokat hívhatnak le. Ezeket a másodlagos munkafolyamatokat minden egyes DELETE vagy UPDATE művelethez feldolgozzuk, miután az elsődleges aktivitási szekvenciák összes triggerjét végrehajtottuk. Ez a folyamat rekurzív módon ismételhető az ezt követő DELETE vagy UPDATE műveletekhez.
A CREATE, ALTER, DELETE vagy egyéb DDL műveletek végrehajtása a triggereken belül DDL triggereket indíthat. Ez további DELETE vagy UPDATE műveleteket eredményezhet, amelyek további szekvenciákat indítanak a lépcsőzetes műveletekkel és elindítják a triggereket.
Ha egy adott sorrendben lépcsőzetes referenciális intézkedések hiba történik ebben a sorrendben nem fut semmilyen kiváltja a UTÁN, és delete vagy update műveletet létre ez a szekvencia visszaszorítását.
Az a táblázat, amelyre az INSTEAD OF trigger van definiálva, tartalmazhat egy REFERENCES záradékot is, amely egy adott lépcsőzetes műveletet jelez. Azonban a lépcsőzetes céltábla AFTER triggerje végrehajthat egy INSERT, UPDATE vagy DELETE utasítást egy másik táblához vagy nézethez, amely kiváltja az objektum INSTEAD OF triggerjét.