C# - A sysdepends rendszertábla

MS SQL Server rendszertáblái 4. rész

forráskód letöltése
A cikksorozatnak ebben a számában a sysdepends rendszertáblával foglalkozunk részletesebben, mely szintén minden létrejövő adatbázisban megtalálható. A cikkben bemutatásra kerül a táblában található valamennyi oszlop, valamint egy példán keresztül ismertetjük, hogy milyen mennyiségű adatot tárol az adatbázis egy adott objektumáról. A rendszertáblához kapcsolódóan bemutatunk egy rendszerfüggvényt is, mellyel az adatbázis objektumainak kapcsolatairól még több információ szerezhető.
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:
  • Table1 tábla
name type updated selected column
dbo.Table1 user table no no ItemID
dbo.Table1 user table no no ItemName
  • ’GetItem’ eljárás
name type
dbo.GetItem stored procedure

MS SQL Server rendszertáblái cikksorozat