JK.Li 登录

SQL SEVER得到数据库里所有表的结构信息

Posted by 2014/6/19 17:43:53  •  Author:JK.Li

SELECT (case when a.colorder=1 then d.name else '' end) N'表名',a.colorder N'字段序号',a.name N'字段名',(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '1'else '0' end) N'标识',(case when (SELECT count(*)FROM sysobjects WHERE (name in (SELECT name FROM sysindexes WHERE (id = a.id) AND (indid in(SELECT indid FROM sysindexkeys WHERE (id = a.id) AND (colid in(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name))))))) AND (xtype = 'PK'))>0 then '1' else '0' end) N'主键',b.name N'类型',a.length N'占用字节数',COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小数位数',(case when a.isnullable=1 then '1'else '0' end) N'允许空',isnull(e.text,'') N'默认值',isnull(g.[value],'') AS N'字段说明'FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' left join syscomments e on a.cdefault=e.id left join sys.extended_properties g on a.id=g.major_id AND a.colid = g.minor_id order by object_name(a.id),a.colorder


 SQL Server系统表的应用


--1:获取当前数据库中的所有用户表

select Name from sysobjects where xtype='u' and status>=0


--2:获取某一个表的所有字段

select name from syscolumns where id=object_id('表名')


--3:查看与某一个表相关的视图、存储过程、函数

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'


--4:查看当前数据库中所有存储过程

select name as 存储过程名称 from sysobjects where xtype='P'


--5:查询用户创建的所有数据库

Select * from master..sysdatabases D
where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01


--6:查询某一个表的字段和数据类型

select column_name,data_type from information_schema.columns
where table_name = '表名'


--7:取得表字段的描述

select name, (select value from sysproperties where id = syscolumns.id and smallid=syscolumns.colid) as 描述from syscolumns where id=object_id('表名')

--8取得主键和自增字段(标识)

SELECT 
           a.colorder, 
           a.name, 
           case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '标识字段' else '主键字段' end 
           FROM syscolumns a 
           where id=object_id(N'my_vote') --要查询的表名
            and( --标识字段 
           COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 
           or --主键字段 
           exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( 
           SELECT name FROM sysindexes WHERE indid in( 
           SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid 
           )))) 
           order by a.id,a.colorder



--9取主键

EXEC sp_pkeys @table_name='TableName'


 


 


方法二:


SELECT TableName=CASE WHEN C.column_id=1 THEN O.name ELSE N'' END,
TableDesc=ISNULL(CASE WHEN C.column_id=1 THEN PTB.[value] END,N''),
Column_id=C.column_id,
ColumnName=C.name,
PrimaryKey=ISNULL(IDX.PrimaryKey,N''),
[IDENTITY]=CASE WHEN C.is_identity=1 THEN N'1'ELSE N'0' END,
Computed=CASE WHEN C.is_computed=1 THEN N'1'ELSE N'0' END,
Type=T.name,
Length=C.max_length,
Precision=C.precision,
Scale=C.scale,
NullAble=CASE WHEN C.is_nullable=1 THEN N'1'ELSE N'0' END,
[Default]=ISNULL(D.definition,N''),
ColumnDesc=ISNULL(PFD.[value],N''),
IndexName=ISNULL(IDX.IndexName,N''),
IndexSort=ISNULL(IDX.Sort,N''),
Create_Date=O.Create_Date,
Modify_Date=O.Modify_date
FROM sys.columns C
INNER JOIN sys.objects O
ON C.[object_id]=O.[object_id]
AND O.type='U'
AND O.is_ms_shipped=0
INNER JOIN sys.types T
ON C.user_type_id=T.user_type_id
LEFT JOIN sys.default_constraints D
ON C.[object_id]=D.parent_object_id
AND C.column_id=D.parent_column_id
AND C.default_object_id=D.[object_id]
LEFT JOIN sys.extended_properties PFD
ON PFD.class=1
AND C.[object_id]=PFD.major_id
AND C.column_id=PFD.minor_id
LEFT JOIN sys.extended_properties PTB
ON PTB.class=1
AND PTB.minor_id=0
AND C.[object_id]=PTB.major_id
-- AND PFD.name='Caption' -- 表说明对应的描述名称(一个表可以添加多个不同name的描述)
LEFT JOIN -- 索引及主键信息
(
SELECT
IDXC.[object_id],
IDXC.column_id,
Sort=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN N'1'ELSE N'0' END,
IndexName=IDX.Name
FROM sys.indexes IDX
INNER JOIN sys.index_columns IDXC
ON IDX.[object_id]=IDXC.[object_id]
AND IDX.index_id=IDXC.index_id
LEFT JOIN sys.key_constraints KC
ON IDX.[object_id]=KC.[parent_object_id]
AND IDX.index_id=KC.unique_index_id
INNER JOIN -- 对于一个列包含多个索引的情况,只显示第1个索引信息
(
SELECT [object_id], Column_id, index_id=MIN(index_id)
FROM sys.index_columns
GROUP BY [object_id], Column_id
) IDXCUQ
ON IDXC.[object_id]=IDXCUQ.[object_id]
AND IDXC.Column_id=IDXCUQ.Column_id
AND IDXC.index_id=IDXCUQ.index_id
) IDX
ON C.[object_id]=IDX.[object_id]
AND C.column_id=IDX.column_id 
--WHERE O.name=N'Merchandise' -- 如果只查询指定表,加上此条件


Tagged: 表的结构信息  

Comments (0)  • 

0 评论列表

发表评论

京公网安备 11010702001442号