Megjegyzés hozzáadása objektumokhoz – extended property

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