Említettem, hogy magában az adatbázisban is lehet némi meta-információt tárolni.
Legalábbis én erre szoktam használni az extended property lehetőséget, ami tulajdonképpen kulcs-érték párokat jelent, amiket a sys.extended_properties segítségével tudjuk lekérdezni.
Természetesen ahhoz, hogy le tudjuk kérdezni, először hozzá is kell tudnunk adni, erre szolgál az sp_addextendedproperty.
Egy egyszerű példa:
execute sp_addextendedproperty
@name = N'Description', @value = N'Ide jöhet, amit tárolni szeretnénk.',
@level0type = N'Schema', @level0name = 'ide_jon_a_schema_neve',
@level1type = N'Table', @level1name = 'ide_jon_a_tabla_neve',
@level2type = N'Column', @level2name = 'ide_jon_az_oszlop_neve';
A level0type, level1type, level2type elhagyható, illetve más értékeket is felvehet. Ezekkel tudjuk szabályozni, hogy mihez szeretnénk hozzárendelni. Ha mindhármat elhagyjuk, akkor az adatbázishoz magához kerülnek ezek a metaadatok. A fenti linken levő leírásban megtaláljátok, melyik szinten milyen objektumot használhatunk.
Ha már létrehoztuk, akkor törölni is tudjuk természetesen az sp_dropextendedproperty segítségével. A paraméterei nagyjából ugyanazok, mint a hozzáadásnál, csak itt az értéket nem kell megadni.
execute sp_dropextendedproperty
@name = N'Description',
@level0type = N'Schema', @level0name = 'ide_jon_a_schema_neve',
@level1type = N'Table', @level1name = 'ide_jon_a_tabla_neve',
@level2type = N'Column', @level2name = 'ide_jon_az_oszlop_neve';
Természetesen a frissítés sem maradhat el az sp_updateextendedproperty képében.
Paraméterei pont ugyanazok, mint hozzáadásnál.
execute sp_updateextendedproperty
@name = N'Description', @value = N'Ide jöhet, amit tárolni szeretnénk.',
@level0type = N'Schema', @level0name = 'ide_jon_a_schema_neve',
@level1type = N'Table', @level1name = 'ide_jon_a_tabla_neve',
@level2type = N'Column', @level2name = 'ide_jon_az_oszlop_neve';
Ahogy az elején írtam a sys.extended_properties nézetből lehet visszakapni ezeket, például az alábbi kis lekérdezéssel:
select
st.name as tableName,
sc.name as columnName,
isnull(sep.name, '') as extendedName,
isnull(sep.value, '') as extendedValue
from sys.tables st
inner join sys.columns sc
on st.object_id = sc.object_id
left join sys.extended_properties sep
on st.object_id = sep.major_id
and sc.column_id = sep.minor_id