C# - MS SQL tárolt eljárások

MS SQL tárolt eljárások 6. rész

forráskód letöltése
Ebben a részben egy olyan tárolt eljárást mutatunk be, amellyel az adatbázis szerver tulajdonságait kérdezhetjük le. Megtudhatjuk például, hogy az SQL szerver melyik verziója fut, a különböző objektum nevekben használható nevek maximális hosszát, valamint azt, hogy bizonyos műveleteket, tulajdonságokat támogat-e az adott szerver. A cikk második részében pedig egy adott tábla indexeiről kérdezünk le bizonyos információkat.
1_sp_server_info.sql: Adatbázis szerver tulajdonságok lekérdezése
Az adatbázis szerver tulajdonságait az sp_server_info tárolt eljárással tudjuk lekérdezni. Az eljárás egy három oszlopból álló eredménytáblát ad vissza, amelyben minden rekord egy-egy tulajdonságot tartalmaz. A tulajdonságokat egy kódszámmal tudjuk azonosítani, adott esetben megkeresni. Az eljárás szintaxisa a következő:
sp_server_info [[@attribute_id =] 'attribute_id']
Az eljárásnak csak egyetlen paramétere van, az attribute_id. Ebben a paraméterben adhatjuk meg a lekérdezendő tulajdonság kódját. Ha elhagyjuk a paramétert, akkor az összes tulajdonság lekérdezésre kerül.
Az eljárás által visszaadott eredménytáblában az alábbi oszlopok szerepelnek:
Oszlop neve Adattípus Leírás
ATTRIBUTE_ID int A tulajdonság egyedi azonosító száma (kódszáma).
ATTRIBUTE_NAME varchar(60) A tulajdonság neve.
ATTRIBUTE_VALUE varchar(255) A tulajdonság aktuális értéke.
Az alábbi táblázatban a lehetséges tulajdonságok, és azok adatai szerepelnek:
ATTRIBUTE_ID ATTRIBUTE_NAME Lehetséges érték Leírás
1 DBMS_NAME Microsoft SQL Server
2 DBMS_VER Microsoft SQL Server 2000 - 8.00.xxx (Intel X86) May 31 2000 00:54:06 Copyright (c) 1988-2000 Microsoft Corporation
10 OWNER_TERM owner
11 TABLE_TERM table
12 MAX_OWNER_NAME_LENGTH 128 Tulajdonos nevének maximális hossza.
13 TABLE_LENGTH 128 Tábla nevének maximális hossza.
14 MAX_QUAL_LENGTH 128 A maximum hossza a tábla qualifier-nek (a három részes táblanév hivatkozás első része).
15 COLUMN_LENGTH 128 Az oszlopok nevének maximális hossza.
16 IDENTIFIER_CASE SENSITIVE Megadja a felhasználó által az adatbázisban létrehozható neveket (tábla, oszlop, tárolt eljárás).
17 TX_ISOLATION 2 A tranzakció izolációs szint kezdeti értéke.
18 COLLATION_SEQ charset=iso_1 sort_order=dictionary_iso charset_num=1 sort_order_num=51 Meghatározza a karakterkészletek sorrendjét.
19 SAVEPOINT_SUPPORT Y Megadja, hogy a DBMS támogatja-e a névvel azonosítható mentési pontokat.
20 MULTI_RESULT_SETS Y Megadja, hogy támogatja-e a több lekérdezés eredményét tartalmazó eredménylistákat.
22 ACCESSIBLE_TABLES Y Megadja, hogy az sp_tables eljárásban csak azok a táblák jelenjenek-e meg, amelyekhez az aktuális felhasználónak legalább SELECT hozzáférési joga van.
100 USERID_LENGTH 128 Meghatározza a felhasználói nevek maximális hosszát.
101 QUALIFIER_TERM database Meghatározza a háromtagú név-hivatkozások első elemének típusát.
102 NAMED_TRANSACTIONS Y Megadja, hogy a DBMS támogatja-e a tranzakciók elnevezését.
103 SPROC_AS_LANGUAGE Y Megadja, hogy a tárolt eljárások futtathatók-e eseményként.
104 ACCESSIBLE_SPROC Y Megadja, hogy az sp_stored_procedures eljárás csak azokat a tárolt eljárásokat listázza-e, amelyek futtatásához az aktuális felhasználónak is van joga.
105 MAX_INDEX_COLS 16 A DBMS által egy indexben használható mezők maximális számát határozza meg.
106 RENAME_TABLE Y Megadja, hogy a táblák átnevezhetők-e.
107 RENAME_COLUMN Y Megadja, hogy az oszlopok átnevezhetők-e.
108 DROP_COLUMN Y, ha az SQL Server 2000 fut, és N, ha korábbi verzió. Megadja, hogy a mezők törölhetők-e.
109 INCREASE_COLUMN_LENGTH Y, ha az SQL Server 2000 fut, és N, ha korábbi verzió. Megadja, hogy a mezők mérete megnövelhető-e.
110 DDL_IN_TRANSACTION Y, ha az SQL Server version 6.5 vagy ennél későbbi verzió fut, és N, ha ennél korábbi. Megadja, hogy a DLL utasítások megjelennek-e a tranzakciókban.
111 DESCENDING_INDEXES Y, ha az SQL Server 2000 fut, és N, ha korábbi verzió. Megadja, hogy a csökkenő indexek támogatottak-e.
112 SP_RENAME Y Megadja, hogy a tárolt eljárások átnevezhetők-e.
113 REMOTE_SPROC Y Megadja, hogy a tárolt eljárások futtathatnak-e távoli tárolt eljárásokat a
DB-Library-ban.
500 SYS_SPROC_VERSION Aktuális verzió Megadja a rendszer tárolt eljárások verziószámát.
2_sp_statistics.sql: Indexek tulajdonságainak lekérdezése
Az sp_statistics tárolt eljárással egy lépésben kérdezhetjük le az indexekkel kapcsolatos információkat. Az eljárás szintaxisa a következőképpen néz ki:
sp_statistics [@table_name =] 'table_name'
[,[@table_owner =] 'owner']
[,[@table_qualifier =] 'qualifier']
[,[@index_name =] 'index_name']
[,[@is_unique =] 'is_unique']
[,[@accuracy =] 'accuracy']
Az eljárás paraméterei:
table_name
Annak a táblának a nevét adhatjuk meg ebben a paraméterben, amelynek az indexeit le szeretnénk kérdezni. A tábla nevét egyértelműen és kötelezően meg kell adni.
table_owner
A tábla tulajdonosának neve. Nem kötelező.
table_qualifier
A táblát tartalmazó adatbázis nevét adhatjuk meg ebben a paraméterben. Nem kötelező.
index_name
A lekérdezendő index neve. Ha nem adjuk meg, akkor az összes indexet lekérdezi.
is_unique
Ha ennek a paraméternek az értéke „Y”, akkor csak azokat az indexeket kérdezi le, amelyek nem tartalmazhatnak az index-ben szereplő mezőkben azonos értékeket (egyedi, unique indexek). Az alapértelmezett értéke „N”.
accuracy
A statisztika pontosságát határozza meg ez az index. Az alapértelmezett értéke „Q”. Ha nagyobb pontosságra van szükség, akkor állítsuk a paraméter értékét „E”-re.
Az eljárás által visszaadott eredménytábla.
Oszlop neve Adattípus Leírás
TABLE_QUALIFIER sysname A táblát tartalmazó adatbázis neve.
TABLE_OWNER sysname A tábla tulajdonosának neve.
TABLE_NAME sysname A tábla neve.
NON_UNIQUE smallint Értékei lehetnek: 0 = Unique (egyedi index) 1 = Not unique (nem egyedi index).
INDEX_QUALIFIER sysname Az index tulajdonosának neve. Több DBMS támogatja, hogy ne csak a tábla tulajdonosa, hanem más felhasználók is létrehozhassanak indexeket.
INDEX_NAME sysname Az index neve.
TYPE smallint Típus: 0 = tábla statisztika 1 = nyalábolt 2 = tördelt 3 = más.
SEQ_IN_INDEX smallint Az oszlop pozíciója az indexben.
COLUMN_NAME sysname Az oszlop neve.
COLLATION char(1) Értéke mindig „A”.
CARDINALITY int Rekordok száma a táblában, vagy az egyedi értékek száma az indexben.
PAGES int Az index vagy a tábla tárolására használt lapok száma.
FILTER_CONDITION varchar(128) Nincs érték.

MS SQL tárolt eljárások cikksorozat