
A példához szükséges a SampleDatabase03 adatbázis, melyet a mellékelt SampleDatabase03.sql lefuttatásával hozhatunk létre. A SampleDatabase03.sql script 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
Mint a rendszertáblák mindegyikéről, a sysconstraints rendszertábláról is elmondható és hangsúlyozandó, hogy közvetlenül lehetőleg ne kerüljön sor a módosítására. A rendszer tábláinak manuális módosítása be nem látható következményekkel járhat, a rendszer integritása sérülést szenvedhet, mely végső soron a rendszer működésének zavarait okozhatja.
A sysconstraints rendszertábla, mint ahogy azt neve is elárulja, az adatbázis tábláiban deklarált tábla –, és oszlopszintű megszorításokkal kapcsolatban tartalmaz egy-egy bejegyzést. Ide tartoznak a PRIMARY KEY, FOREIGN KEY, UNIQUE KEY megszorítások, valamint a CHECK és DEFAULT megszorítások. A sysconstraints tábla legfőképpen az ugyancsak minden létrejövő adatbázisban megtalálható rendszertáblával, a sysobjects táblával áll szoros kapcsolatban. Tartalmaz ugyanis egy azonosítót arra vonatkozóan, hogy a sysobjects táblában bejegyzett objektumok közül melyikhez kapcsolódik, röviden melyik táblához (oszlophoz) tartozik. Oszlopai sorban a következők:
| Sorszám |
Oszlop neve |
Típusa |
Leírás |
| 1 |
constid |
int |
A megszorítás azonosítója. |
| 2 |
id |
int |
A megszorítást birtokló tábla azonosítója, mely az objektumot azonosítja a sysobjects táblában. |
| 3 |
colid |
smallint |
Annak az oszlopnak az azonosítója, melyre a megszorítás vonatkozik. 0, amennyiben a megszorítás tábla szintű. |
| 4 |
spare1 |
tinyint |
Fenntartott. |
| 5 |
status |
int |
Egy bitminta jelzi a megszorítás státuszát. Lehetséges értékei:1 - PRIMARY KEY megszorítás, 2 - UNIQUE KEY megszorítás, 3 - FOREIGN KEY megszorítás, 4 - CHECK megszorítás, 5 - DEFAULT megszorítás, 16 – oszlop szintű megszorítás, 32 – tábla szintű megszorítás |
| 6 |
actions |
int |
Fenntartott. |
| 7 |
error |
int |
Fenntartott. |
A mellékelt példában azt modellezzük, hogy miként kerülhet új bejegyzés a sysconstraints táblába. A SampleDatabase03.sql script lefuttatása után egy Table1 nevű adattábla kerül be az adatbázisba. Adatokat nem tartalmaz, hiszen nem is ez a lényeg. A tábla létrehozásának SQL utasítása:
CREATE TABLE [Table1]
(
[ItemID] [int] NOT NULL,
[ItemName] [varchar] (50) NOT NULL
)ON [PRIMARY]
A tábla első, ItemID nevű oszlopára hozunk létre egy PRIMARY KEY megszorítást, a következőképpen.
Az alkalmazás Form-ja két DataGrid komponensben jeleníti meg a lényeges információkat. A felső sorai tartalmazzák a sysconstraint rendszertábla aktuális állapotát, míg az alsó DataGrid komponens a sysobjects tábla azon sorát, amely a megszorítással kapcsolatban további információkat tárol.
A script lefutásakor bekerül az adatbázisba két tárolt eljárás, melyek a megszorítás létrehozását, illetve törlését végzik. A létrehozásért a MakeConstraints, míg a törlésért a DropConstraints nevű tárolt eljárás a felelős. Az alkalmazásban az „Insert” feliratú gombbal indítható a megszorítás létrehozásának művelete, míg a „Drop” feliratú gombbal törölhető az adott megszorítás. A megszorítás „PK_Table1” néven kerül létrehozásra a tárolt eljárás magjában a következőképpen:
ALTER TABLE dbo.Table1 ADD CONSTRAINT
PK_Table1 PRIMARY KEY CLUSTERED
(
ItemID
)ON [PRIMARY]
A törlés pedig egy rövid ellenőrzés után a következő kóddal érhető el a DropConstraints eljárásban:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PK_Table1]') and OBJECTPROPERTY(id, N'IsPrimaryKey') = 1)
alter table Table1
drop constraint PK_Table1
A megszorítás létrehozásakor tehát két bejegyzés kerül a rendszertáblákba. Az első a sysconstraints táblába, mely így mutat:
| 1 |
2 |
3 |
4 |
5 |
6 |
7 |
| 85575343 |
1977058079 |
0 |
0 |
2593 |
4096 |
0 |
A második bejegyzés pedig a sysobjects kerül, melyből a fontosabb oszlopok a következők:
| 1 |
2 |
3 |
4 |
5 |
| PK_Table1 |
85575343 |
PK |
1977058079 |
2002.11.19 0:03 |
Az oszlopok magyarázata a következő:
- 1 : A megszorítás neve karakteresen
- 2 : A megszorítás egyedi azonosítója, mely a sysconstraints táblában azonosítja a megszorítást
- 3 : A megszorítás kódja (a rövidítés a PRIMARY KEY-re utal)
- 4 : A megszorítást birtokló tábla (jelen esetben a Table1) egyedi azonosítója
- 5 : A megszorítás létrehozásának ideje