2013-03-01 9 views
17

zugreifen Ich versuche, die Spaltenbeschreibung Eigenschaften mit Hilfe des INFORMATION_SCHEMAeine Abfrage verwenden, um Spalte Beschreibung in SQL

ich diese Frage in der Vergangenheit geschaffen habe, um Zugriff auf die Spaltennamen zu bekommen, aber ich kann nicht herausfinden, wie man Beschreibung der Spalte

SELECT COLUMN_NAME AS Output, ORDINAL_POSITION 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE (TABLE_NAME = @Tablename) AND (ORDINAL_POSITION = @Location) 

 Screen shot

Hier wird die Beschreibung auf den Feldeigenschaften ist

+0

Sie auch yourtablename do sp_helptext kann – DevelopmentIsMyPassion

+0

Welche Beschreibung soll das heißen? Wo hast du das gesehen? – RBarryYoung

Antwort

42

Wenn von 'Beschreibung' Sie bedeuten, 'Beschreibung' angezeigt in SQL Management Studio im Entwurfsmodus, hier ist es:

select 
     st.name [Table], 
     sc.name [Column], 
     sep.value [Description] 
    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 
             and sep.name = 'MS_Description' 
    where st.name = @TableName 
    and sc.name = @ColumnName 
+0

Was wäre der beste Weg für mich, die ORDINAL_POSITION damit zu verknüpfen? (Ist es am besten, es direkt in der Abfrage zu verwenden, oder sollte ich die Spalte COLUMN_NAME verwenden, die im Abfrage-Beispiel gefunden wurde, das ich zuerst gepostet habe, um die Beschreibung zu finden?) Vielen Dank –

+1

Ich glaube, INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION ist das gleiche wie sys.columns.column_id, also sollten Sie in der Lage sein, es direkt zu verwenden, wenn sys.extended_properties (als minor_id) – Incidently

+0

Ich habe ständig diesen Typ VARANT nicht unterstützter Fehler :(und die Verbindung wurde direkt danach fallen gelassen. mssql2012 – Ben

1

Die fn_listextendedproperty Systemfunktion wird tun, was Sie suchen für (bezeichnet als sys.fn_listextendedproperty für SQL Server 2012 auf MSDN).

Syntax ist wie folgt:

fn_listextendedproperty ( 
    { default | 'property_name' | NULL } 
, { default | 'level0_object_type' | NULL } 
, { default | 'level0_object_name' | NULL } 
, { default | 'level1_object_type' | NULL } 
, { default | 'level1_object_name' | NULL } 
, { default | 'level2_object_type' | NULL } 
, { default | 'level2_object_name' | NULL } 
) 

Verwendungsbeispiel: Listen erweiterten Eigenschaften für alle Spalten der Tabelle ScrapReason im Production Schema

USE AdventureWorks2012; 
GO 
SELECT objtype, objname, name, value 
FROM fn_listextendedproperty (NULL, 'schema', 'Production', 'table', 'ScrapReason', 'column', NULL); 
GO 

sp_helptext wird nicht funktionieren, da es nicht sein kann, verwendet für Tabellen nach TechNet.

zeigt die Definition einer benutzerdefinierten Regel Standard, unverschlüsselte Transact-gespeicherte SQL-Prozedur, benutzerdefinierte Transact-SQL-Funktion, Trigger, berechnet Spalte, CHECK-Einschränkung, eine Ansicht oder Systemobjekt solchen als eine gespeicherte Systemprozedur.

sp_columns gibt das sys.extended_properties.value Feld, das Sie suchen, nicht zurück.

fn_listextendedproperty ist wohl einfacher zu arbeiten und generischer als die Abfrage in der angenommenen Antwort.

0

Wenn Sie speziell verwenden INFORMATION_SCHEMA wollen (wie ich), dann sollte die folgende Abfrage hilft Ihnen das Beschreibungsfeld der Spalte zu erhalten:

SELECT COLUMN_NAME AS [Output] 
    ,ORDINAL_POSITION 
    ,prop.value AS [COLUMN_DESCRIPTION] 
FROM INFORMATION_SCHEMA.TABLES AS tbl 
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS col ON col.TABLE_NAME = tbl.TABLE_NAME 
INNER JOIN sys.columns AS sc ON sc.object_id = object_id(tbl.table_schema + '.' + tbl.table_name) 
    AND sc.NAME = col.COLUMN_NAME 
LEFT JOIN sys.extended_properties prop ON prop.major_id = sc.object_id 
    AND prop.minor_id = sc.column_id 
    AND prop.NAME = 'MS_Description' 
WHERE tbl.TABLE_NAME = @TableName 
+0

Warum der Downvote? –

+1

danke, genau das, was ich brauchte. Nicht sicher, warum das würde downvoted werden. – Rob

Verwandte Themen