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