2013-03-01 12 views
17

Sto cercando di accedere alle proprietà Descrizione Colonna utilizzando l'INFORMATION_SCHEMAutilizzare una query per accedere descrizione di colonna in SQL

ho creato questa query in passato per ottenere il nome della colonna, ma non riesco a capire come ottenere descrizione della colonna

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

 Screen shot

Questo è dove la descrizione è sulle proprietà di campo

+0

si può anche fare sp_helptext yourtablename – DevelopmentIsMyPassion

+0

Che descrizione vuoi dire? Dove l'hai visto? – RBarryYoung

risposta

42

Se da 'Descrizione' vuol dire 'Descrizione' visualizzato in SQL Management Studio in modalità progettazione, eccolo:

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

Quale sarebbe il modo migliore per me per collegare l'ORDINAL_POSITION a questo? (è meglio usarlo direttamente nella query o dovrei usare il COLUMN_NAME trovato nell'esempio di query che ho postato per trovare la descrizione?) Grazie mille –

+1

Credo che INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION sia lo stesso di sys.columns.column_id, quindi dovresti essere in grado di usarlo direttamente quando si esegue una query su sys.extended_properties (come minore_id) – Incidently

+0

Ho costantemente questo tipo di VARANT non errore supportato. :(e la connessione è caduta subito dopo. mssql2012 – Ben

1

La funzione di sistema fn_listextendedproperty farà quello che stai cercando per (indicato come sys.fn_listextendedproperty per SQL Server 2012 su MSDN).

sintassi è la seguente:

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

Esempio di utilizzo: liste estese proprietà per tutte le colonne della tabella ScrapReason nella Production schema

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

sp_helptext non funzionerà in quanto non può essere utilizzato per le tabelle come da TechNet.

Visualizza la definizione di una regola definita dall'utente, predefinito, non crittografata stored procedure Transact-SQL, funzione Transact-SQL definita dall'utente, grilletto, colonna calcolata, VERIFICA vincolo, immagine, o oggetti di sistema tale come una stored procedure di sistema.

sp_columns non restituisce il campo sys.extended_properties.value che si sta cercando.

fn_listextendedproperty è probabilmente più semplice da utilizzare e più generico della query nella risposta accettata.

0

Se si desidera utilizzare specificamente INFORMATION_SCHEMA (come ero) allora la seguente query dovrebbe aiutare a ottenere descrizione campo della colonna:

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

Perché il downvote? –

+1

grazie, proprio quello di cui avevo bisogno. Non so perché sarebbe stato downvoted. – Rob

Problemi correlati