none
Meta-Daten für Felder in SQL-Server 2014 RRS feed

  • Frage

  • Hallo Zusammen !

    Im  Visual-Foxpro-Datenbank-Container kann man für jedes Feld Meta-Daten
    wie Format, Eingabe-Maske und Überschrift/Caption hinterlegen. Diese Daten
    kann man zur Laufzeit mittels DBGetProp abfragen.

    Gibt es beim SQL-Server auch eine "einfache" Möglichkeit Meta-Daten je Feld
    zu hinterlegen?
    Mir geht es hierbei um die Überschrift/Caption welche für den Benutzer
    lesbar ist um kombinierte Suchfilter erstellen zu können. Die Erstellung soll dabei

    data-driven sein, also in der Datenbank hinterlegt und nicht in der Applikation/GUI.


    Zur dynamischen Erzeugung/Konfiguration des VFP-Cursor-Adpaters hole ich
    mir die Tabellen und Feldinformation aus der Systemansicht
    'Information_Schema.Columns'.
    Kann/darf man da Änderungen vornehmen und wird diese Änderung in der zugehörigen
    Applikations-Datenbank hinterlegt damit auch in der Kunden-Datenbank diese
    Information enthalten ist?

    Vielen Dank schonmal im Vorraus.

    --

    Hans-Peter


    • Bearbeitet groezi Freitag, 11. März 2016 15:40
    Freitag, 11. März 2016 15:34

Antworten

Alle Antworten

  • Hallo Hans-Peter,

    das was Du suchst, sind wohl die Extended Properties.

    EXECUTE sp_addextendedproperty N'MS_Description', N'Deine Beschreibung der Spalte', N'SCHEMA', N'dbo', N'TABLE', N'Tabellename', N'COLUMN', N'Spaltename'

    Siehe dazu auch:

      https://technet.microsoft.com/de-de/library/ms180047.aspx

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Freitag, 11. März 2016 15:54
    Moderator
  • Hallo Stefan !

    > das was Du suchst, sind wohl die Extended Properties.

    Das sieht gut aus :-)

    Ich konnte auch gleich eine Spalte erweitern und die "neue Eigenschaft" als Erweitere Eigenschaft im SSMS sehen.

    Dann habe ich versucht, per SQL-Abfrage an diese Eigenschaft zu kommen. Leider ist es mir bisher nicht gelungen.

    Auch die Abfrage über die Ansicht "'Information_Schema.Columns" hat nichts gebracht.

    Wie kann ich diese neue Eigenschaft abfragen und der Applikation in einem CURSOR zu Verfügung stellen?

    OK, selbst schon gefunden.

    Über die Ansicht sys.extended_properties kann man diese Eigenschaft abfragen.

    Jetzt muß ich noch über die major_id/minor_id die Eltern-Spalte finden.

    Oder über die Funktion fn_listextendedproperty.

    Leider erhalte ich über die Funktion noch kein Ergebnis :-(

    über die Ansicht schon; da muß ich das Ergebnis noch der Tabellen-Spalte zuordnen.

    Hier die Lösung:

    - Über die Ansicht sys.extended_properties die "Extended Properties" abfragen

    => man erhält dabei die major_id, minor_id, den Property-Namen (Spalte name) und die Property-Eigenschaft (hier die Cpation der Spalte).

    - Mit der major_id und minor_id als Relation auf object_id und column_id erhält man aus der Ansicht sys.all_columns die zugehörige Eltern-Spalte.

    Danke für den Schubser Stefan :-)

    Hier noch der fertig TSQL-Aufruf:

    select sys.schemas.name AS TableSchema,
           sys.tables.name AS TableName,
    	   sys.columns.name AS ColumnName,
    	   sys.columns.is_nullable AS IsNullable,
    	   IsNullable = CASE WHEN sys.columns.is_nullable = 0 THEN 'NO' ELSE 'YES' END, 
    	   sys.types.name AS DataType,
    	   sys.columns.max_length AS CharacterMaximumLength,
    	   sys.columns.precision AS NumericPrecision,
    	   sys.columns.scale AS NumericScale,
    	   Caption = CASE WHEN sys.extended_properties.value IS NULL THEN '' ELSE CAST( sys.extended_properties.value AS varchar( 250 ) ) END
    	   from sys.tables
    	   LEFT JOIN sys.schemas ON sys.schemas.schema_id = sys.tables.schema_id
    	   LEFT JOIN sys.columns ON sys.columns.object_id = sys.tables.object_id
    	   LEFT JOIN sys.types ON sys.types.user_type_id = sys.columns.user_type_id
    	   LEFT JOIN sys.extended_properties ON sys.extended_properties.major_id = sys.columns.object_id AND sys.extended_properties.minor_id = sys.columns.column_id

    --

    Hans-Peter






    • Bearbeitet groezi Sonntag, 13. März 2016 09:33
    Freitag, 11. März 2016 16:35