Delphi - Szabályok létrehozása

Transact SQL 18. rész

forráskód letöltése
Amikor egy táblát létrehozunk, akkor annak mezőinél meg kell adni az adattípust. Az adattípus meghatározza, hogy az adott mezőbe milyen értékek kerülhetnek. Nagyon sokszor előfordul azonban az, hogy az adattípus jóval több érték megadását teszi lehetővé, mint ami az adott mezőbe kerülhet. Például egy százalék értéket tartalmazó mező típusa lehet int (egész), ami 100-nál nagyobb, vagy akár negatív érték megadását is lehetővé teszi. Egy szabály megadásával azonban korlátozhatjuk ezt, vagyis meghatározhatjuk, hogy a mezőbe csak 0 és 100 közötti értéket adhassunk meg.
01.sql
Most is szükségük lesz egy teszt adatbázisra, tehát első lépésben ezt hozzuk létre.
02.sql
Létrehozunk egy táblát az adatbázisban két mezővel. Az egyik egy szöveges típusú mező (Txt), a másik pedig egy int típusú (Perc). Ez utóbbira hozunk létre egy olyan szabályt, amely nem engedi meg a 0-nál kisebb, és a 100-nál nagyobb értékek tárolását.
03.sql
A CREATE RULE utasítással létrehozzuk az új szabályt:
CREATE RULE RuleTest AS @Range>=0 AND @Range<=100
A RuleTest a szabály neve, amivel később hivatkozhatunk rá. Az AS kulcsszó után adhatjuk meg a feltételt, aminek a mezőbe írandó adatnak meg kell felelnie. Bármilyen feltételt megadhatunk, ami például a SELECT utasítás WHERE záradékában is érvényes. Az SQL Server nem ellenőrzi, hogy a feltételben szereplő kifejezések adattípusai egyformák-e, ezért erre oda kell figyelni, nehogy hibaüzenetet kapjunk az első ellenőrzés során. A feltételnek a @ karakterrel kell kezdődnie, ami egyben egy paramétert is jelöl. A paraméter neve tetszőleges lehet.
04.sql
Mivel a szabályok önálló objektumok, az elkészítésük után hozzá kell kapcsolni őket a táblák megfelelő oszlopaihoz, vagy egy általunk definiált adattípushoz. A hozzárendelést az sp_bindrule eljárással tudjuk megtenni:
EXEC sp_bindrule 'RuleTest', 'Table1.Perc'
Az eljárás első paramétere a szabály neve, a második pedig annak az objektumnak a neve, amihez rendeljük, jelen esetben a Table1 tábla Perc mezője. Harmadik paraméterként megadható a „FutureOnly” kapcsoló, amely csak a felhasználói adattípusoknál használható, és azt mondja meg, hogy a szabályt csak az ezután létrehozott adatokra fogja alkalmazni.
05.sql
Megpróbálunk felvenni 5 rekordot a Table1 táblába. Ezek közül kettő nem felel meg a megadott szabálynak, ezért hibaüzenetet kapunk.
06.sql
Megszüntetjük a szabály hozzárendelést a Table1 Perc mezőjéhez, majd a DROP RULE utasítással töröljük is a szabályt. A hozzárendelést az sp_unbindrule eljárással tudjuk megszüntetni:
EXEC sp_unbindrule 'Table1.Perc'
DROP RULE RuleTest;
Az sp_unbindrule eljárásnak csupán egy paramétert kell megadnunk, annak az objektumnak a nevét, amelyhez a továbbiakban nem szeretnénk alkalmazni a szabályt. A SROP RULE utasítás után meg kell adni a szabály nevét. Egy szabályt csak akkor lehet törölni, ha már egyetlen oszloppal vagy adattípussal sincs kapcsolatban.
Felveszünk újabb rekordokat, amelyek nem felelnek meg a szabálynak, de mivel már töröltük a szabályt, így nem kapunk hibaüzenetet, és a rekordok bekerülnek a táblába.
07.sql
Töröljük a teszt adatbázist.

Transact SQL cikksorozat