如何获取MSSQLServer,Oracel,Access中的数据字典信息
----------------------------------------------
--------------- MS SQLServer -----------------
----------------------------------------------
--表说明
SELECT dbo.sysobjects.name AS TableName,
dbo.sysproperties.[value] AS TableDesc
FROM dbo.sysproperties INNER JOIN
dbo.sysobjects ON dbo.sysproperties.id = dbo.sysobjects.id
WHERE (dbo.sysproperties.smallid = 0)
ORDER BY dbo.sysobjects.name
--字段说明
SELECT dbo.sysobjects.name AS TableName, dbo.syscolumns.colid,
dbo.syscolumns.name AS ColName, dbo.sysproperties.[value] AS ColDesc
FROM dbo.sysproperties INNER JOIN
dbo.sysobjects ON dbo.sysproperties.id = dbo.sysobjects.id INNER JOIN
dbo.syscolumns ON dbo.sysobjects.id = dbo.syscolumns.id AND
dbo.sysproperties.smallid = dbo.syscolumns.colid
ORDER BY dbo.sysobjects.name, dbo.syscolumns.colid
--主键、外键信息(简化)
select
c_obj.name as CONSTRAINT_NAME
,t_obj.name as TABLE_NAME
,col.name as COLUMN_NAME
,case col.colid
when ref.fkey1 then 1
when ref.fkey2 then 2
when ref.fkey3 then 3
when ref.fkey4 then 4
when ref.fkey5 then 5
when ref.fkey6 then 6
when ref.fkey7 then 7
when ref.fkey8 then 8
when ref.fkey9 then 9
when ref.fkey10 then 10
when ref.fkey11 then 11
when ref.fkey12 then 12
when ref.fkey13 then 13
when ref.fkey14 then 14
when ref.fkey15 then 15
when ref.fkey16 then 16
end as ORDINAL_POSITION
from
sysobjects c_obj
,sysobjects t_obj
,syscolumns col
,sysreferences ref
where
permissions(t_obj.id) != 0
and c_obj.xtype in (@#F @#)
and t_obj.id = c_obj.parent_obj
and t_obj.id = col.id
and col.colid in
(ref.fkey1,ref.fkey2,ref.fkey3,ref.fkey4,ref.fkey5,ref.fkey6,
ref.fkey7,ref.fkey8,ref.fkey9,ref.fkey10,ref.fkey11,ref.fkey12,
ref.fkey13,ref.fkey14,ref.fkey15,ref.fkey16)
and c_obj.id = ref.constid
union
select
i.name as CONSTRAINT_NAME
,t_obj.name as TABLE_NAME
,col.name as COLUMN_NAME
,v.number as ORDINAL_POSITION
from
sysobjects c_obj
,sysobjects t_obj
,syscolumns col
,master.dbo.spt_values v
,sysindexes i
where
permissions(t_obj.id) != 0
and c_obj.xtype in (@#UQ@# ,@#PK@#)
and t_obj.id = c_obj.parent_obj
and t_obj.xtype = @#U@#
and t_obj.id = col.id
and col.name = index_col(t_obj.name,i.indid,v.number)
and t_obj.id = i.id
and c_obj.name = i.name
and v.number > 0
and v.number <= i.keycnt
and v.type = @#P@#
order by CONSTRAINT_NAME, ORDINAL_POSITION
--主键、外键对照(简化)
select
fc_obj.name as CONSTRAINT_NAME
,i.name as UNIQUE_CONSTRAINT_NAME
from
sysobjects fc_obj
,sysreferences r
,sysindexes i
,sysobjects pc_obj
where
permissions(fc_obj.parent_obj) != 0
and fc_obj.xtype = @#F@#
and r.constid = fc_obj.id
and r.rkeyid = i.id
and r.rkeyindid = i.indid
and r.rkeyid = pc_obj.id
----------------------------------------------
------------------- ORACLE -------------------
----------------------------------------------
--表信息
select * from all_tab_comments t
where owner=@#DBO@#
--列信息
select * from all_col_comments t
where owner=@#DBO@#
--主键、外键对照
select OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, R_OWNER, R_CONSTRAINT_NAME
from all_constraints
where owner=@#DBO@# and (Constraint_Type=@#P@# or Constraint_Type=@#R@#)
--主键、外键信息
select *
from all_cons_columns
where owner=@#DBO@#
order by Constraint_Name, Position
----------------------------------------------
------------------- Access -------------------
----------------------------------------------
//Access中的系统表MSysobjects存储属性的字段是二进制格式,不能直接分析
//可以采用ADO自带的OpenSchema方法获得相关信息
//use ADOInt.pas
//po: TableName
//DBCon:TADOConnection
/ds:TADODataSet
--表信息
DBCon.OpenSchema(siTables, VarArrayOf([Null, Null, @#Table@#]), EmptyParam, ds);
--列信息
DBCon.OpenSchema(siColumns, VarArrayOf([Null, Null, @#po@#]), EmptyParam, ds);
--主键
DBCon.OpenSchema(siPrimaryKeys, EmptyParam, EmptyParam, ds);
--主键、外键对照
DBCon.OpenSchema(siForeignKeys, EmptyParam, EmptyParam, ds);
↓相关文章:
- · Access数据库与SQLserver2000的数据互导
- · 用ASP显示ACCESS数据库的的GIF图象
- · 程序: 创建、压缩Access数据库并修改密码演示
- · 直接获取Access、SQL Server等数据库数据
- · 获取access库中表的个数及表的名称[收藏]
- · ACCESS中使用SQL语句应注意的地方及几点技巧
- · SQL SERVER 与ACCESS、EXCEL的数据转换
- · Access 数据类型与 MS SQL 数据类型的相应
- · 新手来看:在Access的窗体中如何确定选项页控件中当前的激活页?
- · Access 新手来看:如何在表中达到用组合框选择备选项目的效果
- · 如何解决access 中 SELECT TOP 1语句竟然返回多条记录的问题?
- · access如何用代码在“默认值”里实现自动编号?单据流水号生成问题。
- · access 如何解决组合框无法满足大量数据的选择问题?
- · Access中如何设定鼠标指针?
- · Access如何制作复杂报表——利用Excel输出复杂报表
- · Access报表打印——自动分页
- · Access中以文字方式保存文件名的图片如何在报表中预览?
- · Access安全吗?——Access安全性之QA详解
- · Access新手来看:如何更改表/窗体/报表...得名字
- · Access 中如何使用 ADO 來压缩或修复 MS Access 文件?
- · SQL Server连接ACCESS数据库的实现
- · 了解 Microsoft Access 安全性
- · 将Excel数据导入Access数据库
- · 从ACCESS转到学习SQL SERVER所遇到的几个问题
- · SQL2005报表服务不能启动问题总结报告
- · sql server的作业调度来建立自动备份的方法
- · SQL Server溢出猎捕肉鸡新方法
- · 没有数据库日志文件恢复数据库方法两则
- · 在SQL Server 2005中解决死锁
- · SQL Server数据库管理常用的SQL和T-SQL语句
- · SQL Server 2005新功能-TSQL
- · SQL Server Express 数据库自动部署问题及解决
- · 如何解决SQL Server占内存过多的问题
- · MS-SQL数据库开发—精典
- · SQL Server数据库文件恢复技术
- · 关于在SQL-SERVER里调用COM组件
- · 如何在SQL Server中保存和输出图片
- · 查找bad sql的方法
- · 编写安全的SQL Server扩展存储过程
- · SQL Server 2000中的触发器使用
- · SQL Server2000数据库文件损坏时如何恢复
- · 用VB备份和恢复SQL Server数据库的方法
- · 数据库日常维护
- · sql server取得网站路径的几种方法以及比较
- · Asp备份与恢复SQLServer数据库

