C# - A sysindexkeys rendszertábla

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

forráskód letöltése
Cikksorozatunknak ebben a számában a sysindexkeys rendszertáblát ismerhetjük meg, mely valamennyi felhasználói adatbázisban megjelenik annak létrehozása után. A cikkben bemutatjuk a rendszertábla oszlopait, valamint egy példán keresztül szemléltetjük funkcióját, kapcsolatát az adatbázis egy másik rendszertáblájával.
A példához szükséges a SampleDatabase08 adatbázis, melyet a mellékelt SampleDatabase08.sql lefuttatásával hozhatunk létre. A SampleDatabase08.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 sysindexkeys rendszertábla a sysindexes rendszertábla funkcióit egészíti ki olyan szempontból, hogy információkat tartalmaz a kulcsok és indexek oszlopaival kapcsolatban.
A rendszertábla oszlopai a következők:
Oszlop neve Típusa Leírása
id int Tábla azonosítója, melyhez az index, illetve kulcs tartozik.
indid smallint Index azonosítója.
colid smallint Oszlop azonosítója.
keyno smallint Az adott oszlop helye az indexben.
Példánkban a SamleDatabase08.sql parancsállomány lefuttatása után az adatbázisba került két adattáblához (Products és Orders) indexeket hozunk létre a CreateIndex tárolt eljárással, valamint indexeket törlünk a DropIndex tárolt eljárás segítségével, és megfigyeljük, hogyan változik a sysindexkeys rendszertábla tartalma. A rendszertábla adatai közül az alkalmazásban csak a két táblánkra létrehozott indexek és kulcsok adatait jelenítjük meg. A Form két nyomógombjával lehet elvégezni a fenti műveleteket.
A Form ’Rendszertáblák’ feliratú fülén található alsó DataGrid kontrolban jelenítjük meg az adatbázisban megtalálható objektumok neveit (táblák és indexek) azonosítóikkal, elősegítendő a felső táblázat értelmezését.
Az alkalmazásban a BuildInfo belső metódusban végezzük el az alsó DataGrid kontrol adatforrásául szolgáló DataTable objektum induláskori létrehozását, valamint műveletvégzés utáni frissítését. Frissítéskor töröljük a régi adatokat:
private int BuildInfo()
{
  int res = 0;
  if (infoTable != null)
  {
    infoTable.Clear();       
  }
Induláskor létrehozzuk a táblát:
else
{
  infoTable = new DataTable();
  DataColumn dc1 = new DataColumn("OBJECT_NAME", Type.GetType("System.String"));
  DataColumn dc2 = new DataColumn("OBJECT_ID", Type.GetType("System.String"));
  infoTable.Columns.Add(dc1);
  infoTable.Columns.Add(dc2);
}
A feltöltéskor kiolvassuk a sysobjects rendszertábla táblaobjektumait azonosítóikkal és beöltjük a táblába:
General.CommandText = "SELECT NAME, ID FROM SYSOBJECTS WHERE (ID = '2009058193') OR (ID = '1977058079')";
SqlDataReader r1 = General.ExecuteReader();
while (r1.Read())
{
  dr=infoTable.NewRow();
  dr["OBJECT_NAME"] = r1.GetSqlString(0);
  dr["OBJECT_ID"] = r1.GetValue(1).ToString();
  infoTable.Rows.Add(dr); 
  }
  r1.Close();
Majd kiolvassuk a sysindexes rendszertábla Products és Orders táblákhoz tartozó indexeit azonosítóikkal, és betöltjük a táblába:
General.CommandText = "SELECT NAME, INDID FROM SYSINDEXES WHERE (ID = '2009058193') OR (ID = '1977058079')";
SqlDataReader r2 = General.ExecuteReader();
while (r2.Read())
{
  dr=infoTable.NewRow();
  dr["OBJECT_NAME"] = r2.GetSqlString(0);
  dr["OBJECT_ID"] = r2.GetValue(1).ToString();
  infoTable.Rows.Add(dr); 
}
r2.Close();
...
Az indexek létrehozása után a következő sorok jelennek meg a sysindexkeys rendszertáblában:
ID INDID COLID KEYNO
1977058079 1 1 1
1977058079 2 2 1
2009058193 1 1 1
2009058193 2 1 1
2009058193 3 2 1

MS SQL Server rendszertáblái cikksorozat