程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> 如何獲取MSSQLServer,Oracel,Access中的數據字典信息

如何獲取MSSQLServer,Oracel,Access中的數據字典信息

編輯:關於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
sysobjectsc_obj
,sysobjectst_obj
,syscolumnscol
,sysreferences ref
where
permissions(t_obj.id) != 0
and c_obj.xtypein ('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.xtypein ('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
sysobjectsfc_obj
,sysreferencesr
,sysindexesi
,sysobjectspc_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);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved