select t.name as [table name], c.name AS [column name], tp.name AS [資料型別],
case tp.name
when 'bigint' then cast(c.precision as varchar(3))
when 'int' then cast(c.precision as varchar(3))
when 'smallint' then cast(c.precision as varchar(3))
when 'tinyint' then cast(c.precision as varchar(3))
when 'numeric' then '(' + cast(c.precision as varchar(3)) + ',' + cast(c.scale as varchar(3)) + ')'
when 'decimal' then '(' + cast(c.precision as varchar(3)) + ',' + cast(c.scale as varchar(3)) + ')'
when 'nvarchar' then cast((c.max_length/2) as varchar(5))
when 'nchar' then cast((c.max_length/2) as varchar(5))
else cast(c.max_length as varchar(5))
end as [長度],
CASE WHEN c.is_nullable=1 THEN 'ok' ELSE 'no' END AS [NULL ok],
ep.value as [描述]
from sys.tables as t
inner join sys.columns as c on t.object_id=c.object_id
inner join sys.types as tp on c.system_type_id = tp.system_type_id
left outer join sys.extended_properties as ep on (ep.major_id = t.object_id
and ep.minor_id = c.column_id and ep.class = 1 )
where tp.system_type_id = tp.user_type_id
order by t.name,c.name