我想获取数据库的表结构信息,分别要取得表名,注释,是否为空,是否为主健等信息,示例(SQL Server)/*
Author:Conis
CreateDate:16:21 2007-08-09
Description:
获取指定表的所有字段属性
Re:
1.如果你不精通SQL代码,请不要随便修改,以免程序不能正常运行。
` 2.字段名称不能修改,否则会导致程序错误
3.如果你一定要修改,建议在修改之前做好备份
=======================================================================
| CopyRight(C)Conis YI |
| URL:http://www.conis.cn |
| E-Mail:[email protected] |
=======================================================================
*/DECLARE @Version VARCHAR(100)
DECLARE @SysTable VARCHAR(50)
DECLARE @sql NVARCHAR(2000)
DECLARE @SmallID VARCHAR(10)
DECLARE @MajorID VARCHAR(10)SET @Version = @@VERSION
IF CHARINDEX('9.00', @Version) = 0 --2005
BEGIN
SET @SysTable = 'sysproperties'
SET @SmallID = 'smallid'
SET @MajorID = 'id'
END
ELSE --2000
BEGIN
SET @SysTable = 'sys.extended_properties'
SET @SmallID = 'minor_id'
SET @MajorID = 'major_id'
ENDSET @sql =
'SELECT
col.name AS ''FieldName'',
(CASE WHEN (SELECT COUNT(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = col.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = col.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = col.id) AND (name = col.name))))))) AND
(xtype = ''PK''))>0 THEN 1 ELSE 0 END) AS ''IsKey'',
typ.name AS ''Type'',
col.length AS ''Length'',
ext.[value] AS ''Description'',
col.isnullable AS ''AllowNull'',
com.text AS ''DefaultValue'',
col.colstat AS ''IsOutPut'',
obj.Name AS ''TableName''FROM syscolumns col
LEFT JOIN systypes typ on col.xtype = typ.xusertype
INNER JOIN sysobjects obj on col.id = obj.id
LEFT JOIN syscomments com on col.cdefault = com.id
LEFT JOIN [PROPERTIES] ext on col.id = ext.[MAJORID] AND col.colid = ext.[SMALLID]
WHERE
obj.name in ({0}) AND (obj.xtype = ''U'' OR obj.xtype = ''V'')
ORDER BY obj.name'SET @sql = REPLACE(@sql, '[PROPERTIES]', @SysTable)
SET @sql = REPLACE(@sql, '[SMALLID]', @SmallID)
SET @sql = REPLACE(@sql, '[MAJORID]', @MajorID)
EXEC sp_executesql @sql/*
Author:Conis
CreateDate:16:50 2007-08-09
Description:
获取所有表的属性
Re:
1.如果你不精通SQL代码,请不要随便修改,以免程序不能正常运行。
` 2.字段名称不能修改,否则会导致程序错误
3.如果你一定要修改,建议在修改之前做好备份
=======================================================================
| CopyRight(C)Conis YI |
| URL:http://www.conis.cn |
| E-Mail:[email protected] |
=======================================================================
*/
DECLARE @Version VARCHAR(100)
DECLARE @SysTable VARCHAR(50)
DECLARE @sql NVARCHAR(1000)
DECLARE @SmallID VARCHAR(10)SET @Version = @@VERSION
IF CHARINDEX('9.00', @Version) = 0 --2005
BEGIN
SET @SysTable = 'sysproperties'
SET @SmallID = 'smallid'
END
ELSE --2000
BEGIN
SET @SysTable = 'sys.extended_properties'
SET @SmallID = 'minor_id'
ENDSET @sql = '
SELECT obj.name AS ''Name'',
CASE --如果是表,则查询表的备注信息。
WHEN obj.xtype = ''U'' THEN
(SELECT TOP 1 ext.value FROM [PROPERTIES] ext WHERE
ext.[SMALLID] = obj.id and ext.[SMALLID] = 0
)
ELSE ''''
END AS ''Description'',
CASE obj.xtype
WHEN ''U'' THEN ''Table''
WHEN ''P'' THEN ''Procedure''
WHEN ''V'' THEN ''View''
END AS ''Type''
FROM sysobjects obj
WHERE (obj.xtype = ''U'' OR obj.xtype = ''V'')
ORDER BY obj.xtype'
SET @sql = REPLACE(@sql, '[PROPERTIES]', @SysTable)
SET @sql = REPLACE(@sql, '[SMALLID]', @SmallID)
EXEC sp_executesql @sql
Author:Conis
CreateDate:16:21 2007-08-09
Description:
获取指定表的所有字段属性
Re:
1.如果你不精通SQL代码,请不要随便修改,以免程序不能正常运行。
` 2.字段名称不能修改,否则会导致程序错误
3.如果你一定要修改,建议在修改之前做好备份
=======================================================================
| CopyRight(C)Conis YI |
| URL:http://www.conis.cn |
| E-Mail:[email protected] |
=======================================================================
*/DECLARE @Version VARCHAR(100)
DECLARE @SysTable VARCHAR(50)
DECLARE @sql NVARCHAR(2000)
DECLARE @SmallID VARCHAR(10)
DECLARE @MajorID VARCHAR(10)SET @Version = @@VERSION
IF CHARINDEX('9.00', @Version) = 0 --2005
BEGIN
SET @SysTable = 'sysproperties'
SET @SmallID = 'smallid'
SET @MajorID = 'id'
END
ELSE --2000
BEGIN
SET @SysTable = 'sys.extended_properties'
SET @SmallID = 'minor_id'
SET @MajorID = 'major_id'
ENDSET @sql =
'SELECT
col.name AS ''FieldName'',
(CASE WHEN (SELECT COUNT(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = col.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = col.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = col.id) AND (name = col.name))))))) AND
(xtype = ''PK''))>0 THEN 1 ELSE 0 END) AS ''IsKey'',
typ.name AS ''Type'',
col.length AS ''Length'',
ext.[value] AS ''Description'',
col.isnullable AS ''AllowNull'',
com.text AS ''DefaultValue'',
col.colstat AS ''IsOutPut'',
obj.Name AS ''TableName''FROM syscolumns col
LEFT JOIN systypes typ on col.xtype = typ.xusertype
INNER JOIN sysobjects obj on col.id = obj.id
LEFT JOIN syscomments com on col.cdefault = com.id
LEFT JOIN [PROPERTIES] ext on col.id = ext.[MAJORID] AND col.colid = ext.[SMALLID]
WHERE
obj.name in ({0}) AND (obj.xtype = ''U'' OR obj.xtype = ''V'')
ORDER BY obj.name'SET @sql = REPLACE(@sql, '[PROPERTIES]', @SysTable)
SET @sql = REPLACE(@sql, '[SMALLID]', @SmallID)
SET @sql = REPLACE(@sql, '[MAJORID]', @MajorID)
EXEC sp_executesql @sql/*
Author:Conis
CreateDate:16:50 2007-08-09
Description:
获取所有表的属性
Re:
1.如果你不精通SQL代码,请不要随便修改,以免程序不能正常运行。
` 2.字段名称不能修改,否则会导致程序错误
3.如果你一定要修改,建议在修改之前做好备份
=======================================================================
| CopyRight(C)Conis YI |
| URL:http://www.conis.cn |
| E-Mail:[email protected] |
=======================================================================
*/
DECLARE @Version VARCHAR(100)
DECLARE @SysTable VARCHAR(50)
DECLARE @sql NVARCHAR(1000)
DECLARE @SmallID VARCHAR(10)SET @Version = @@VERSION
IF CHARINDEX('9.00', @Version) = 0 --2005
BEGIN
SET @SysTable = 'sysproperties'
SET @SmallID = 'smallid'
END
ELSE --2000
BEGIN
SET @SysTable = 'sys.extended_properties'
SET @SmallID = 'minor_id'
ENDSET @sql = '
SELECT obj.name AS ''Name'',
CASE --如果是表,则查询表的备注信息。
WHEN obj.xtype = ''U'' THEN
(SELECT TOP 1 ext.value FROM [PROPERTIES] ext WHERE
ext.[SMALLID] = obj.id and ext.[SMALLID] = 0
)
ELSE ''''
END AS ''Description'',
CASE obj.xtype
WHEN ''U'' THEN ''Table''
WHEN ''P'' THEN ''Procedure''
WHEN ''V'' THEN ''View''
END AS ''Type''
FROM sysobjects obj
WHERE (obj.xtype = ''U'' OR obj.xtype = ''V'')
ORDER BY obj.xtype'
SET @sql = REPLACE(@sql, '[PROPERTIES]', @SysTable)
SET @sql = REPLACE(@sql, '[SMALLID]', @SmallID)
EXEC sp_executesql @sql
解决方案 »
- 求助该如何写这个期初至今累计的语句?
- 菜鸟问题
- sql timestamp传值丢失
- ORA-00604: 递归 SQL 层 1 出现错误,ORA-06553:PLS-213: standard包打不开
- oracle9i的一个session要占多少内存,怎么我的HP下的oracle9i经常出现内存不够的现象,来者有分。
- 请问一个explain plan的问题
- SQL Server数据库导入到Oracle中却不能用,求助!
- 高分求:SQL解决办法
- insert时nextval产生空格,请各位帮忙!!
- Error:Invalid DBA password(-93)
- 跨不同数据库种类能用select in 语句吗?
- 求助一个orcale存储过程 在线等答案
USER_TABLE
USER_TAB_COMMENTS
USER_CONSTRAINTS
USER_TAB_COLUMNS
USER_COL_COMMENTS
这些系统视图里面可以找到.
CLUSTER
TABLE 表
INDEX
REF_CONSTRAINT
CONSTRAINT
VIEW
TYPE
FUNCTION
PROCEDURE
PACKAGE
SEQUENCE
TRIGGER
SYNONYM
DB_LINK 如:
select DBMS_METADATA.GET_DDL('TABLE','MYTABLE') from dual;如果要同时获取多个表的结构:
select DBMS_METADATA.GET_DDL('TABLE',table_name) from USER_TABLES;
select DBMS_METADATA.GET_XML('TABLE','MYTABLE') from dual;
差不多写出来,但不知道如何获取主键
SELECT B.Table_Name AS TableName, B.COLUMN_Name AS FieldName, Comments AS Description,
B.DATA_TYPE AS Type, B.DATA_LENGTH AS Length, B.DATA_DEFAULT AS DefaultValue, 0 AS IsOutPut,
DECODE(B.NULLABLE, 'Y', '1', '0') AS AllowNull, B.
FROM USER_COL_COMMENTS A LEFT JOIN USER_TAB_COLUMNS B
ON A.table_name = B.TABLE_NAME AND A.column_name = B.COLUMN_NAME
le_name='SYS_USER' and constraint_type='P';CONSTRAINT_NAME OWNER C
------------------------------ ------------------------------ -
PK_SYS_USER TEXTLIU P