2013-03-01 34 views
17

Tôi cố gắng để truy cập vào các thuộc tính Mô tả cột bằng cách sử dụng INFORMATION_SCHEMASử dụng một truy vấn để truy cập Mô tả cột trong SQL

Tôi đã tạo ra truy vấn này trong quá khứ để có được tên cột, nhưng tôi không thể tìm ra cách để có được Mô tả của cột

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

 Screen shot

Đây là nơi mô tả là trên các thuộc tính lĩnh vực

+0

Bạn cũng có thể làm sp_helptext yourtablename – DevelopmentIsMyPassion

+0

gì bạn có nghĩa mô tả gì? Nơi mà bạn đã nhìn thấy điều này? – RBarryYoung

Trả lời

42

Nếu bằng 'description' bạn có nghĩa là 'Mô tả' được hiển thị trong SQL Management Studio trong chế độ thiết kế, ở đây là:

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

Cách tốt nhất để tôi liên kết ORDINAL_POSITION với điều này là gì? (tốt nhất là sử dụng nó trực tiếp trong truy vấn hay tôi nên sử dụng COLUMN_NAME được tìm thấy trong ví dụ truy vấn mà tôi đã đăng lần đầu để tìm mô tả?Cảm ơn bạn rất nhiều –

+1

Tôi tin rằng INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION giống như sys.columns.column_id, vì vậy bạn có thể sử dụng nó trực tiếp khi truy vấn sys.extended_properties (như minor_id) – Incidently

+0

Tôi liên tục có loại VARANT này không lỗi được hỗ trợ. :(và kết nối đã giảm ngay sau đó. mssql2012 – Ben

1

Chức năng fn_listextendedproperty hệ thống sẽ làm những gì bạn đang tìm kiếm cho (được gọi là sys.fn_listextendedproperty cho SQL Server 2012 trên MSDN).

Cú pháp như sau:

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

Ví dụ Cách sử dụng: Chức năng mở rộng thuộc tính cho tất cả các cột của bảng ScrapReason trong lược đồ Production

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

sp_helptext sẽ không làm việc vì nó không thể được sử dụng cho các bảng theo TechNet.

Hiển thị định nghĩa của một quy tắc người dùng định nghĩa, mặc định, không được mã hóa Transact-SQL thủ tục lưu trữ, chức năng Transact-SQL do người dùng định nghĩa, cò, cột tính, ràng buộc kiểm tra, xem, hoặc đối tượng hệ thống như vậy như một thủ tục lưu trữ hệ thống.

sp_columns không trả lại trường sys.extended_properties.value mà bạn đang tìm kiếm.

fn_listextendedproperty được cho là dễ dàng hơn để làm việc và chung chung hơn truy vấn trong câu trả lời được chấp nhận.

0

Nếu bạn đặc biệt muốn sử dụng INFORMATION_SCHEMA (như tôi đã được) sau đó truy vấn sau đây sẽ giúp bạn có được lĩnh vực mô tả của cột:

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

Tại sao các downvote? –

+1

cảm ơn, chỉ cần những gì tôi cần thiết.Không chắc chắn lý do tại sao mà sẽ được downvoted. – Rob

Các vấn đề liên quan