2013-03-01 19 views
17

próbuję uzyskać dostęp do właściwości opis Kolumna pomocą information_schemaużywać kwerendy, aby uzyskać dostęp opis kolumny w SQL

stworzyłem tego zapytania w przeszłości, aby uzyskać nazwę kolumny, ale nie mogę dowiedzieć się, jak dostać się Opis kolumny

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

 Screen shot

tym miejscu opis znajduje się na właściwości pola

+0

Można również temat polecenia sp_helptext yourtablename – DevelopmentIsMyPassion

+0

Jaki opis masz na myśli? Gdzie to widziałeś? – RBarryYoung

Odpowiedz

42

Jeśli przez „opis” masz na myśli „Opis” wyświetlanego w SQL Management Studio w trybie projektowania, oto ona:

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

Jaki byłby najlepszy sposób na powiązanie ORDINAL_POSITION z tym? (czy najlepiej jest użyć go bezpośrednio w zapytaniu, czy też powinienem użyć COLUMN_NAME znalezionego w pierwszym przykładzie, który napisałem, aby znaleźć opis?) Dziękuję bardzo –

+1

Wierzę, że INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION jest taki sam jak sys.columns.column_id, więc powinieneś być w stanie użyć go bezpośrednio podczas kwerendy sys.extended_properties (jako minor_id) – Incidently

+0

Nieustannie mam ten typ VARANT nie obsługiwany błąd. :(i połączenie zostało porzucone zaraz po nim mssql2012 – Ben

1

Funkcja systemowa fn_listextendedproperty zrobi to, czego szukasz dla (określane jako sys.fn_listextendedproperty dla SQL Server 2012 na MSDN).

Składnia jest następująca:

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 } 
) 

Przykład użycia: Listy rozszerzone właściwości wszystkich kolumn tabeli ScrapReason w schemacie Production

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

sp_helptext nie będzie działać, ponieważ nie może być używane do tabel zgodnie z TechNet.

Wyświetla Definicja reguły zdefiniowane przez użytkownika, domyślnie niezaszyfrowanej Transact-SQL procedury przechowywanej, funkcji Transact-SQL zdefiniowanego przez użytkownika, spuście, obliczane kolumny, ograniczenia CHECK, widoku lub obiektu systemu takie jako procedura składowana systemu.

sp_columns nie zwraca pola sys.extended_properties.value, którego szukasz.

fn_listextendedproperty jest prawdopodobnie łatwiejsze do pracy i bardziej ogólne niż zapytanie w zaakceptowanej odpowiedzi.

0

Jeśli chcesz użyć specjalnie information_schema (jak ja), to poniższa kwerenda powinien pomóc uzyskać Opis Pole kolumny:

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

Dlaczego spadł? –

+1

dzięki, właśnie to, czego potrzebowałem .Nie wiem, dlaczego to zostanie odrzucone. – Rob

Powiązane problemy