如何获取MSSQLServer,Oracel,Access中的数据字典信息

access|server|sqlserver|数据

----------------------------------------------
--------------- 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);

 

时间: 2024-10-28 19:45:31

如何获取MSSQLServer,Oracel,Access中的数据字典信息的相关文章

简析Geoserver中获取图层列表以及各图层描述信息的三种方法

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 实际项目中需要获取到Geoserver中的图层组织以及各图层的描述信息:比如字段列表等.在AGS中,我们可以直接通过其提供的REST服务获取到图层组织情况以及图层详细信息列表,具体如下所示:   那么在Geoserver中是否也有相关用法?各种方法之间有何优劣? 2.REST请求方法 2.1方法描述 该方法与上面讲解的AGS的REST请求方法类似,也是先获取

如何在百度站长工具中添加站长“信息提醒”

摘要: 一.如何在百度站长工具中添加站长信息提醒 作为一个特殊网络群体,作为一个苦逼又自得其乐的群体,作为天天研究搜索引擎的冲浪人群,自从我们选择了站长,可能就已经走上了一 一.如何在百度站长工具中添加站长"信息提醒" 作为一个特殊网络群体,作为一个苦逼又自得其乐的群体,作为天天研究搜索引擎的冲浪人群,自从我们选择了站长,可能就已经走上了一条与百度一起的不归路.(PS:现在百度一家独大已经是不争的事实!),最近百度站长工具平台又推出了"消息提醒"的工具.百度官方平台

如何获取access中的超链接并显示为超链接而不是文本

问题描述 在access中将所需字段"客户编号"的类型设置了超链接,通过asp访问显示后是文本形式的超连接,而我需要的是直接点击的带下划线的超连接形式谢谢大虾救急啊 解决方案 解决方案二:这个...<ahref="http://www.csdn.net/">点击打开新地址</a>解决方案三:连接access数据库例程<%@ImportNamespace="System.Data"%><%@ImportNa

Oracle中的数据字典技术及常用数据字典总结

一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等.当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息. Oracle中的数据字典有静态和动态之分.静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的.以下分别就这两类数据字典来论述. 1.

ASP如何通过匹配access中的数据以获得其中的密码?

问题描述 ASP如何通过匹配access中的数据以获得其中的密码? 在做网站的时候又遇到一个问题,就是如何应用asp语言来达到获取寻回密码的功能,我现在表单里有邮箱和电话两个最能代表个人信息的数据,但是如何通过匹配这两个数据以获得密码却成了一道越不过去的坎.具体代码应该怎么写呢?有前辈可以指教一下吗?我尝试过的基本上都不行 解决方案 找回密码的含义不是找到输入的密码,相反,如果密码能找到,那么非常不安全.一旦数据库泄露,后果是灾难的.你应该让用户输入他注册的用户名和邮箱,你判断用户名和邮箱在你数

Access中如何设定鼠标指针?

access|鼠标指针 Access中如何设定鼠标指针?   问题: 如何设定鼠标指针?   方法一: Private Declare Function alxSetCursor Lib "user32" Alias "SetCursor" (ByVal hCursor As Long) As Long'将指定的鼠标指针设为当前指针Private Declare Function alxGetCursor Lib "user32" Alias &

select-asp.net 从Access中随机读取5条记录

问题描述 asp.net 从Access中随机读取5条记录 我用的是 select top 5 * from Pro where TypeId =1 order by rnd(ID) 在数据库查询的时候是随机的5条 每次查询都会变 但是在网页绑定时一直不变总是那几条记录 是什么原因? 解决方案 Asp.net获取Access随机记录ASP.NET 2.0中随机读取Access数据库记录ASP.NET 2.0中随机读取Access数据库记录

access-如何在Access中删除一行数据,怎么出错?? String sql=&amp;amp;quot;DELETE FROM T

问题描述 如何在Access中删除一行数据,怎么出错?? String sql="DELETE FROM T Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn= DriverManager.getConnection("jdbc:odbc:DDEmployer"); Statement stat=conn.createStatement(); String id=javax.swi

数据-用sql语句在access中如何删除自动编号的那一行

问题描述 用sql语句在access中如何删除自动编号的那一行 今天又遇到了一个新问题:我尝试着用sql语句删除access中自动编号的一行,可是出错了,提示我数据类型不匹配.请问我应该怎么改写sql语句? String id=request.getParameter("ID");//从上个页面获取的ID int index=Integer.parseInt(id);//将id转换成字符串类型 . . String sql = "delete from tb_poll whe