Announcement

Collapse
No announcement yet.

spaltenbeschreibung auslesen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • spaltenbeschreibung auslesen?

    ich möchte auf die spaltenbeschreibung einzelner spalten
    von tabellen zugreifen, finde jedoch die
    entsprechende systemtabelle im mssql nicht.
    weiss da jemand rat.
    mfg

  • #2
    Hallo,

    das direkte Abfrage der Systemtabellen wäre zu viel Aufwand, da der MS SQL Server für diesen Zweck die Systemprozedur <b>sp_help</b> zur Verfügung stellt. Das folgende Beispiel demonstriert dies:

    <pre>

    USE Northwind
    GO
    EXEC sp_help Customers

    </pre>

    Wenn diese Informationen erst zur Laufzeit direkt von der eigenen Anwendung ausgewertet werden sollen, steht die Methode <b>OpenSchema</b> des <i>Connection</i>-Objekts von ADO bzw. der <i>TADOConnection</i>-Komponente von ADOExpress/dbGo zur Verfügung:

    <pre>

    <b>procedure</b> TForm1.ButtonOpenSchemaClick(Sender: TObject);
    <b>var</b>
    aSI : TSchemaInfo;
    i : Integer;
    <b>begin</b>
    <b>case</b> RadioGroupQueryType.ItemIndex <b>of</b>
    0 : aSI := siColumns;
    1 : aSI := siPrimaryKeys;
    2 : aSI := siTableConstraints;
    3 : aSI := siIndexes;
    4 : aSI := siForeignKeys;
    5 : aSI := siPrimaryKeys;
    <b>end</b>;
    ADOConnection1.OpenSchema(aSI, EmptyParam, Emptyparam, ADODataSet1);
    <b>with</b> ADODataSet1 <b>do</b>
    <b>for</b> i := 0 <b>to</b> Pred(Fields.Count) <b>do</b>
    Fields[i].DisplayWidth := 4;
    <b>end</b>;

    </pre>
    &#10

    Comment


    • #3
      hat geklappt, vielen dan

      Comment


      • #4
        doch noch nicht ok.
        ich bekomme zwar ziemlich viele werte angeboten,
        aber die beschreibung der spalte ist nicht dabei

        Comment


        • #5
          Hallo,

          &gt;..aber die beschreibung der spalte ist nicht dabei ?

          in diesem Fall scheint das <b>Extented Property <i>"Column Description"</i></b> gemeint zu sein. Da die Extended Properties kein Bestandteil von ANSI-SQL sind, darf der MS SQL Server diese Informationen nicht als Bestandteil des Schemas zurückliefern. Statt dessen ist die Systemfunktion <b>fn_listextendedproperty</b> zuständig, die diese Infos aus der Systemtabelle <i>sysproperties</i> ausliest. Das folgende Beispiel demonstriert den Einsatz:
          <pre>

          USE tempdb
          GO
          CREATE TABLE ExtPropDemo (
          RecID INTEGER NOT NULL IDENTITY PRIMARY KEY,
          Wert VARCHAR(9) NOT NULL)
          GO
          INSERT INTO ExtPropDemo (Wert) VALUES ('Test')
          GO

          sp_addextendedproperty 'OSExtPropDemo','Kommentar zu ExtPropDemo.Wert', 'user','dbo','table','ExtPropDemo','column','Wert'
          GO

          SELECT * FROM ::fn_listextendedproperty('OSExtPropDemo','user',' dbo','table','ExtPropDemo','column','Wert')

          </pre&gt

          Comment


          • #6
            Hallo,

            ich bekomme bei Verwendung von
            SELECT * FROM ::fn_listextendedproperty('OSExtPropDemo','user',' dbo','table','ExtPropDemo','column','Wert') zwar soweit alles angezeigt, jedoch wird in der VALUE-Spalte nicht der korrekte Beschreibungsstring angezeigt, sondern <binär>.

            Hab keine Idee mehr woran das liegen könnte.

            danke im voraus für die Hilfe

            Comment


            • #7
              Hallo,
              ich habe das alte Beispiel auf meiner aktuellen Kiste ausprobiert, dort ist die Zeichenkette der Beschreibung sichtbar. Ich kann das Problem somit nicht reproduzieren.
              <br>
              Was passiert, wenn <b>CAST</b> herangezogen wird?
              <code>
              SELECT CAST(value AS NVARCHAR) FROM ::fn_listextendedproperty(....
              </code&gt

              Comment


              • #8
                Hallo,

                Habs jetzt mal mit sp_updateextendedproperty probiert und als caption MS_Description genommen.

                Dann merkert er rum:
                Die MS_Description-Eigenschaft ist für 'dbo.T_Raum.RM_ID' nicht vorhanden.

                wenn ich aber in das "beschreibung"-feld der spalte "RM_ID" was eingebe und wieder lösche und den befehl dann noch mal ausführe klappts.

                komisch

                hast ne ahnung??

                Comment


                • #9
                  Hallo,

                  welches Ergebnis liefert im Query Analyzer die Anweisung PRINT @@VERSION zurück (dazu auf <i>Abfrage | Ergebnis in Text</i> umschalten)

                  Comment


                  • #10
                    Hallo,
                    die Beschreibungen zu den Feldern stehen in sysproperties. Du benötigst dazu die Tabellen-ID (select id from sysobjects where name = 'meineTabelle') und die Spaltennummer in der Tabelle (select colid from syscolumns where id = Tabellen-ID and name = 'meineSpalte').

                    Das wird dann zu einem großen Statement zusammengapuzzelt:
                    select
                    'TableName' = o.name
                    , 'ColumnName' = c.name
                    , 'Bemerkung' = p.value
                    from sysobjects o inner join syscolumns c on o.id = c.id
                    left outer join sysproperties p on o.id = p.id and c.colid = p.smallid
                    where o.name = 'meineTabelle'

                    Der left outer join muss sein, da ja nicht jede Spalte auch eine Beschreibung hat..

                    Comment

                    Working...
                    X