使用下面的存储过程:
如果输入表名则取出此表,如果不输入表名则选出全表结构,有问题请继续问我。
--此存储过程可以取出所输入表的字段信息,如果表名为空则列出当前数据库中的所有表的信息,
--如果@WITHVIEW参数不为0则列出视图的字段信息,为0则不列视图信息 CREATE PROCEDURE [dbo].[TABLE_INFO](@TABLENAME VARCHAR(50),@WITHVIEW BIT=0 )
AS
BEGIN if NOT exists (select * from dbo.sysobjects
where id = object_id(N'[dbo].[DATADICT]') and OBJECTPROPERTY(id, N'IsUserTable')=1)
BEGIN IF @TABLENAME IS NULL BEGIN IF @WITHVIEW=0 BEGIN SELECT CASE O.TYPE WHEN 'V ' THEN '视图: ' + O.NAME ELSE '表: ' + O.NAME END AS 表名,C.name AS 列名, T.name AS 类型, C.length AS 长度, C.prec AS 精度, C.scale AS 小数位数, CASE C.ISNULLABLE WHEN 0 THEN 'YES ' ELSE 'NO ' END AS 可否为空FROM sys.syscolumns AS C INNER JOINsys.systypes AS T ON C.xusertype = T.xusertype INNER JOINsys.sysobjects AS O ON C.id = O.idWHERE (O.type = 'U ') AND (O.name NOT IN ('SYSCONSTRAINTS ', 'SYSSEGMENTS '))ORDER BY O.type, O.name, 列名 END ELSE BEGIN SELECT 表名= CASE O.TYPE WHEN 'V ' THEN '视图: '+ O.NAME ELSE '表: '+ O.NAME END ,C.NAME AS 列名,T.NAME AS 类型,C.LENGTH AS 长度,C.PREC 精度,C.SCALE AS 小数位数 , 可否为空= CASE C.ISNULLABLE WHEN 0 THEN 'YES ' ELSE 'NO ' END FROM SYSCOLUMNS C,SYSOBJECTS O ,SYSTYPES T WHERE T.xUSERTYPE=C.xUSERTYPE AND O.ID=C.ID AND (O.TYPE= 'U ' OR O.TYPE= 'V ') AND O.NAME NOT IN ( 'SYSCONSTRAINTS ', 'SYSSEGMENTS ') ORDER BY O.TYPE,O.NAME,C.NAME END END ELSE BEGIN SELECT C.name AS 列名, T.name AS 类型, C.length AS 长度, C.prec AS 精度, C.scale AS 小数位数, CASE C.ISNULLABLE WHEN 0 THEN 'YES ' ELSE 'NO ' END AS 可否为空FROM sys.syscolumns AS C INNER JOINsys.systypes AS T ON C.xusertype = T.xusertype INNER JOINsys.sysobjects AS O ON C.id = O.idWHERE (O.name = @TABLENAME)ORDER BY O.type, O.name, 列名
END
END
ELSE
BEGIN IF NOT @TABLENAME IS NULL BEGIN SELECT @TABLENAME AS 表名, A.NAME AS 列名,C.EXPLAIN AS 说明, B.NAME AS 数据类型, A.LENGTH AS 长度,A.XPREC AS 精度,A.XSCALE AS 小数位数 FROM SYSCOLUMNS A join SYSTYPES AS B on B.XTYPE=A.XTYPE right join DATADICT AS C on C.FIELDS=A.NAME WHERE ID = OBJECT_ID(@TABLENAME) AND C.TABLENAME=@TABLENAME ORDER BY A.NAME END ELSE BEGIN SELECT 表名= CASE O.TYPE WHEN 'V ' THEN '视图: '+ O.NAME ELSE '表: '+ O.NAME END , A.NAME AS 列名,C.EXPLAIN AS 说明, B.NAME AS 数据类型, A.LENGTH AS 长度,A.XPREC AS 精度,A.XSCALE AS 小数位数 FROM SYSCOLUMNS A join SYSTYPES AS B on B.XUSERTYPE=A.XUSERTYPE right join DATADICT AS C on C.FIELDS=A.NAME right join SYSOBJECTS AS O on C.TABLENAME=O.NAME WHERE A.ID = O.ID AND (O.TYPE= 'U ' OR O.TYPE= 'V ') AND O.NAME NOT IN ( 'SYSCONSTRAINTS ', 'SYSSEGMENTS ') ORDER BY O.TYPE, O.NAME,A.NAME END END END