Benutzer mit den meisten Antworten
Meta-Daten für Felder in SQL-Server 2014

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 dabeidata-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
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
- Bearbeitet Stefan FalzModerator Freitag, 11. März 2016 15:55
- Als Antwort vorgeschlagen Christoph Muthmann Montag, 14. März 2016 14:09
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 29. März 2016 06:33
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
- Bearbeitet Stefan FalzModerator Freitag, 11. März 2016 15:55
- Als Antwort vorgeschlagen Christoph Muthmann Montag, 14. März 2016 14:09
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 29. März 2016 06:33
-
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