正文
一、取得所有用户表
select
st.table_name,st.remarks
from
sysobjects tbl
inner join SYSTABLE st on st. object_id = tbl.id
where tbl.type = ' U ' and tbl.uid = 1
inner join SYSTABLE st on st. object_id = tbl.id
where tbl.type = ' U ' and tbl.uid = 1
二、取得表的详细字段信息
select
c.name
as
ColumnName, c.length, c.prec, c.scale,baset.name
as
[
DataType
]
,stb.pkey,stb.
[
nulls
]
,stb.
[
default
]
,stb.remarks
from sysobjects tbl
inner join dbo.syscolumns as c on tbl.id = c.id
inner join SYSTABLE st on st. object_id = tbl.id
inner join SYSCOLUMN stb on stb.column_name = c.name and stb.table_id = st.table_id
inner join systypes as baset on c.type = baset.type and c.usertype = baset.usertype
where tbl.name = ' {0} ' and tbl.type = ' U ' and tbl.uid = 1
from sysobjects tbl
inner join dbo.syscolumns as c on tbl.id = c.id
inner join SYSTABLE st on st. object_id = tbl.id
inner join SYSCOLUMN stb on stb.column_name = c.name and stb.table_id = st.table_id
inner join systypes as baset on c.type = baset.type and c.usertype = baset.usertype
where tbl.name = ' {0} ' and tbl.type = ' U ' and tbl.uid = 1
注意"tbl.name='{0}'"替换成表名,这里就不考虑额外的情况了。
三、注意问题
3.1 以上取表结构语句不能取到数据类型为“uniqueidentifierstr”的字段,这个字段在sysobjects和syscolumns没有!!但是SYSCOLUMN里面能找到,所以随后需要再研究一下,找到办法了会再来更新此文。
3.2 取试图和存储过程等其他取元数据的SQL语句随后要用到或者有时间并且能弄出来的话再贴出来更新此文。
结束语
明白原理了,就不用花大把大把的时间去研究人家工具了,一方面有点杀鸡用牛刀,再者自己写的时间比研究工具的时间可能要短,并且更加实用一些(找破解、一动就是几百兆的软件安装 - -#)。再次感谢搜索引擎,虽然没有直接找到,但是给的暗示足够我完成这项任务 : )
本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586708,如需转载请自行联系原作者