2013-03-01 30 views
17

我試圖用使用查詢來訪問列描述SQL

我已經在過去創造了這個查詢的INFORMATION_SCHEMA來獲取列名訪問列描述屬性,但我無法弄清楚如何獲得列的描述

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

 Screen shot

這就是說明是關於字段屬性

+0

你也可以做sp_helptext在yourtablename – DevelopmentIsMyPassion 2013-03-01 15:46:31

+0

你是什麼意思的描述?你在哪裏看到這個? – RBarryYoung 2013-03-01 16:27:15

回答

42

如果在設計模式顯示在SQL Management Studio中「描述」你的意思是「說明」,那就是:

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

將ORDINAL_POSITION鏈接到此的最佳方式是什麼? (最好是直接在查詢中使用它,還是應該使用查找示例中找到的COLUMN_NAME,我首先發布該查詢以查找描述?)非常感謝 – 2013-03-02 17:23:45

+1

我相信INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION和sys.columns.column_id是一樣的,所以你應該可以直接在查詢sys.extended_properties時使用它(作爲minor_id) – Incidently 2013-03-02 23:13:32

+0

我經常使用這個VARANT類型支持的錯誤。 :(並且連接之後就下降了。mssql2012 – Ben 2018-01-05 12:30:52

1

fn_listextendedproperty系統功能會做你要找什麼for(在MSDN上稱爲SQL Server 2012的sys.fn_listextendedproperty)。

語法如下:

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

實例應用:解釋擴展爲ScrapReason表的所有列屬性在Production架構

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

sp_helptext不會工作,因爲它不能根據TechNet用於表格。

顯示一個用戶定義的規則,默認情況下,未加密的 Transact-SQL存儲過程,用戶定義的Transact-SQL函數, 觸發器的定義,計算列,CHECK約束,視圖或系統對象 這樣作爲系統存儲過程。

sp_columns不返回您要查找的sys.extended_properties.value字段。

fn_listextendedproperty可以說比被接受的答案中的查詢更容易處理並且更通用。

0

如果你特別想使用INFORMATION_SCHEMA(因爲我),那麼下面的查詢應該可以幫助您獲得列的描述字段:

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

爲什麼downvote? – 2017-06-12 11:54:02

+1

感謝,正是我所需要的。不知道爲什麼會被低估。 – Rob 2018-01-22 11:34:27