
A példához szükséges a SampleDatabase04 adatbázis, melyet a mellékelt SampleDatabase04.sql lefuttatásával hozhatunk létre. A SampleDatabase04.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.
A sysdepends rendszertábla az adatbázis objektumai között fennálló függőségi kapcsolatokat írja le. Amikor az adatbázis objektumairól beszélünk, akkor a táblákon és nézeteken túl természetesen ebbe a kategóriába tartozóba tekintjük a tárolt eljárásokat és triggereket is.
A függőségi viszonyon a MS SQL Server terminológiája szerint objektumok olyan kapcsolata értendő, mely értelmezhető úgy, mint az ismertségi, illetve a tartalmazási kapcsolatok valamelyike a fogalmak tágabb értelmében. Kiterjedhet adattábla és az ebből képzett nézettábla viszonyára, a tárolt eljárás és az általa végzett művelet cél adattáblája közötti kapcsolatra, vagy akár egy tárolt eljárás és egy, a törzsében meghívott újabb tárolt alprogram viszonyára.
A sysdepends 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 függőségi viszonyban résztvevő egyik objektum a sysobjects táblában bejegyzett objektumok közül melyikhez kapcsolódik. A rendszertábla oszlopai a következők:
| Sorszám |
Oszlopnév |
Adattípus |
Leírás |
| 1 |
id |
int |
Objektum egyedi azonosítója. |
| 2 |
depid |
int |
Annak az objektumnak az egyedi azonosítója, mellyel függőségi viszonyban áll. |
| 3 |
number |
smallint |
Értéke 1, amennyiben az objektum tárolt eljárás. |
| 4 |
depnumber |
smallint |
Megadja, hogy az objektumnak, amitől függ, melyik részobjektumához kapcsolódik. |
| 5 |
status |
smallint |
Belső állapot információ. |
| 6 |
depdbid |
smallint |
Fenntartott. |
| 7 |
depsiteid |
smallint |
Fenntartott. |
| 8 |
selall |
bit |
Értéke 1, ha az objektum része egy SELECT * utasításnak. |
| 9 |
resultobj |
bit |
Értéke 1, ha az objektum frissítés alatt áll. |
| 10 |
readobj |
bit |
Értéke 1, ha az objektum olvasás alatt áll. |
A legfontosabb információkat az első, a második és a negyedik oszlop tartalmazza. A mellékelt példában bemutatjuk, miként kerül új érték a sysdepends rendszertáblába.
A SampleDatabase04.sql parancsállomány lefuttatása után több objektum már előre bekerül adatbázisunkba. Létrejön egy Table1 nevű adattábla, mely három oszlopot tartalmaz. Ez a sysdepends tábla bejegyzéseinek szempontjából fontos, később részletezzük, hogy miért.
Létrejön továbbá két tárolt eljárás, melyekből a ’RealGetItem’ nevezetű műveletet végez a Table1 táblán úgy, hogy a ’GetItem’ nevű másik tárolt eljárás meghívja azt. Így alakítva ki a két eljárás között egyfajta függőségi viszonyt. A ’RealGetItem’ tárolt eljárás funkcionalitását nem használja ki a példaprogram, létrehozására csupán szemléltető célzattal került sor. Az eljárás egy INPUT és egy OUTPUT paraméterrel rendelkezik. Működését tekintve a bemenő paraméterben megadott azonosítóval (’ItemID’ oszlop) rendelkező elem nevét adja vissza (’ItemName’ oszlop) a kimenő paraméterben, vagyis két oszlopát érinti a Table1 táblának.
A programban egy TabControl kontrol füleit választva érhetjük el funkcióit. A ’Nézettábla létrehozása’ fül két gombjával létrehozhatunk, illetve törölhetünk egy View1 nevű nézetet a Table1 táblához. A DataGrid kontrolban látható a nézet adattartalma.
A ’SYSDEPENDS rendszertábla’ feliratú fület választva pedig egy DataGrid kontrolban követhetjük nyomon a sysdepends tábla állapotát, csak azokat az adatokat megjelenítve, melyek számunkra fontosak. Ennek megfelelően a táblázat csak Table1 tábla, a ’GetItem’ és ’RealGetItem’ tárolt eljárásra vonatkozóan tartalmaz adatokat, majd a View1 nézettábla létrehozása után arra vonatkozóan is. A táblázat alatti ComboBox kontrol mintegy magyarázatként tartalmazza az objektumok nevét és egyedi azonosítójukat.
A létrejövő/létrehozott objektumok adatai a sysobjects rendszertáblában:
| Objektum neve |
Azonosítója |
Kódja |
| Table1 |
1977058079 |
U |
| RealGetItem |
1993058136 |
P |
| GetItem |
2009058193 |
P |
| View1 |
2025058250 |
V |
A sysdepends rendszertáblába pedig a következő adatok kerülnek:
| 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
| 1993058136 |
1977058079 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
| 1993058136 |
1977058079 |
1 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
| 2025058250 |
1977058079 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
| 2025058250 |
1977058079 |
0 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
| 2025058250 |
1977058079 |
0 |
3 |
1 |
0 |
0 |
0 |
0 |
0 |
| 2009058193 |
1993058136 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
Az adatokat tanulmányozva látható, hogy a ’RealGetItem’ eljárás a Table1 tábla két oszlopával végzett műveletének eredményeként két bejegyzéssel szerepel a táblában. A View1 nézettábla annyi bejegyzést kap, amennyi oszlopát tartalmazza a Table1 táblának az azonosító oszlopon kívül. A GetItem’ eljárás csak egy bejegyzést kapott, hiszen csak egy objektummal áll függőségi viszonyban, mégpedig a meghívott eljárással.
A sysdepends rendszertáblához kötődik az MS SQL Server számtalan rendszerfüggvénye közül az, amelyik a SP_DEPENDS nevet viseli. Segítségével meghatározható a paraméterként kapott objektum függőségi viszonya más objektumokhoz. Szintaxisa a következő:
sp_depends [ @objname = ] 'object'
A paraméterben karakterlánc formában kell megadni az objektum nevét, melyről információt szeretnénk kapni. Típusát tekintve a paraméter nvarchar(776), alapértelmezett értéke nincs. A függvény visszatérési értéke sikeres lekérdezés esetén 0, egyébként 1.
A függvény a következőképpen hívható a ’RealGetItem’ eljárásra:
EXEC SP_DEPENDS ’RealGetItem’
A végrehajtáskor keletkező eredményhalmaz a következő oszlopokat tartalmazza:
| Oszlopnév |
Típus |
Leírás |
| name |
nvarchar(40) |
Objektum neve, mely függőségi viszonyban áll a kérdéses objektummal. |
| type |
nvarchar(16) |
Objektum típusa. |
| updated |
nvarchar(7) |
Az objektum frissített-e. |
| selected |
nvarchar(8) |
Az objektum része-e SELECT utasításnak. |
| column |
sysname |
Az érintett táblaoszlop neve. |
A fenti lekérdezés eredményei:
| name |
type |
updated |
selected |
column |
| dbo.Table1 |
user table |
no |
no |
ItemID |
| dbo.Table1 |
user table |
no |
no |
ItemName |
| name |
type |
| dbo.GetItem |
stored procedure |