对于很多数据库爱好者来说,不断深入研究数据库的结构是件十分有意思的事情,笔者无聊时玩了一下,仅供大家参考。
sqlserver 版本是2012的。
对于查询数据库中的表使用的sql语句有很多中写法,笔者大多数都是结合sql server自带的监听工具"sql server profile"的使用,打开监听后,再在数据库进行想要的操作后,返回到监听工具界面,如下图。
通过查询可以查询的相关的sql语句和函数的使用方法。
以下语句就是使用这种方法得到的,描述数据库中含有的表名、字段、数据类型、说明等信息,希望对大家有用。
select distinct acol.name tabname,col.name colname, col.column_id,
case when st.name=‘numeric’ then ‘numeric(’+cast(col.max_length as varchar(3)) + ‘,’+ cast(col.scale as varchar(3))+’)’
when st.name=‘varchar’ then ‘varchar(’+cast(col.max_length as varchar(3)) +’)’ when st.name=‘nvarchar’ then ‘nvarchar(’+cast(col.max_length as varchar(3))+’)’
when st.name=‘char’ then ‘char(’+cast(col.max_length as varchar(3)) +’)’ else st.name end ColumnType,
case when col.is_nullable=1 then ‘Y’ else ‘N’ end IsNullAble,ep.value AS column_description
from sys.columns col
left outer join (select a.object_id,b.name from sys.all_columns a,sys.tables b where a.object_id =b.object_id ) acol on col.object_id = acol.object_id
left outer join sys.types st on st.user_type_id = col.user_type_id
left outer join sys.types bt on bt.user_type_id = col.system_type_id
left outer join sys.extended_properties ep ON ep.major_id = col.object_id AND ep.minor_id = col.column_id
where acol.name is not null
order by acol.name,col.column_id
在sql 查询分析器中选择一个数据库后,执行该语句,即可得到如下图结果:
当然,如果还需要其他信息的,比如外键等等,大家可以试着调整sql来玩一下!