
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 |