otrdiena, 2011. gada 20. septembris

DB objektu paplašinātās īpašības (Extended properties)

Paplašinātās īpašības var norādīt objektiem datu bāzē (pašai datu bāzei, tabulai, kolonai, funkcijai, utt). Šajā rakstā par to, kur var norādīt un apskatīt paplašinātās īpašības (SSMS) un arī pielietojums, kur tās liekas īpaši noderīgas.

Tātad, SQL Server Management Studio (SSMS) paplašinātās īpašības var norādīt nospiežot labo pogu uz objekta (piemēram, kolonnas) un izvēloties properties:
 

Nākamajā logā var pievienot un apskatīt paplašinātās īpašības:


No augšējā attēla vēl būtu labi zināt, ka katrai paplašinātajai īpašībai norāda tās nosaukumu un vērtību (to pašu un vēl vairāk var izdarīt ar sp_addextendedproperty procedūru). Vērtība ir sql_variant datu tips, līdz ar to tajā vienlīdz labi var glabāties gan skaitliska, gan tekstuāla informācija (izmantot to var ar procedūras palīdzību).

Personīgi man šīs paplašinātās īpašības visvairāk patīk tieši zīmējot diagrammas (datu bāze -> database diagrams -> labā poga un "New database diagram"), šeit es vienu arī uztaisīju:


Tā jau viss ir labi, bet es šeit gribu redzēt vēl divas papildus kolonas- (1) vai lauks ir Identity un (2) lauka aprakstu. Šo divu kolonu pievienošana notiek tā (labā poga uz tabulas):


un izvēlos vajadzīgās kolonnas (no kreisās puses dabūju uz labo):


Galu galā izvēlos, lai tabulas tiktu rādītas Custom formā (diemžēl, jānorāda katrai tabulai individuāli):


Un iegūta diagramma:


Šādai diagrammai var sarakstīt paskaidrojumus padarot to daudz lietojamāku! Starp citu, diagrammā pierakstītie komentāri būs ar paplašinātās īpašības nosaukumu "MS_Description".

Ko darīt, lai ievadīto informāciju dabūtu laukā no datu bāzes? Var izmantot funkciju fn_listextendedproperty, vai arī katalogu skatu sys.extended_properties.
Te vaicājums, kas mazliet papildina kataloga skata atgriezto informāciju + atfiltrē lieko, atstājot tikai diagrammā pierakstītos aprakstus:
select OBJECT_NAME(major_id), col.name, prop.name, value
from sys.extended_properties prop
    left join sys.columns col on prop.major_id = col.object_id And
        prop.minor_id = col.column_id
where class = 1 and prop.name = 'MS_Description'

Nav komentāru:

Komentāra publicēšana