程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 關於Oracle與SqlServer中獲取所有字段、主鍵、外鍵的sql語句

關於Oracle與SqlServer中獲取所有字段、主鍵、外鍵的sql語句

編輯:關於SqlServer

最近在做的社會網絡分析原型系統需要將多種不同數據庫中的表的字段、主外鍵信息讀出,實現這些功能費了不少功夫,記錄下來以備用吧

Oracle:

查詢某個表中的字段名稱、類型、精度、長度、是否為空

select COLUMN_NAME,DATA_TYPE,DATA_PRECISION,DATA_SCALE,NULLABLE

from user_tab_columns

where table_name ='YourTableName'

查詢某個表中的主鍵字段名

select col.column_name

from user_constraints con,  user_cons_columns col

where con.constraint_name = col.constraint_name

and con.constraint_type='P'

and col.table_name = 'YourTableName'

查詢某個表中的外鍵字段名稱、所引用表名、所應用字段名

select distinct(col.column_name),r.table_name,r.column_name

from

user_constraints con,

user_cons_columns col,

(select t2.table_name,t2.column_name,t1.r_constraint_name

 from user_constraints t1,user_cons_columns t2

 where t1.r_constraint_name=t2.constraint_name

 and t1.table_name='YourTableName'

 ) r

where con.constraint_name=col.constraint_name

and con.r_constraint_name=r.r_constraint_name

and con.table_name='YourTableName'

SQLServer中的實現:

字段:

SELECT c.name,t.name,c.xprec,c.xscale,c.isnullable

FROM systypes t,syscolumns c

WHERE t.xtype=c.xtype

AND c.id = (SELECT id FROM sysobjects WHERE name='YourTableName')

ORDER BY c.colid

主鍵(參考SqlServer系統存儲過程sp_pkeys):

select COLUMN_NAME = convert(sysname,c.name)              

from                                                      

sysindexes i, syscolumns c, sysobjects o                  

where o.id = object_id('[YourTableName]')                 

and o.id = c.id                                           

and o.id = i.id                                           

and (i.status & 0x800) = 0x800                            

and (c.name = index_col ('[YourTableName]', i.indid,  1) or    

     c.name = index_col ('[YourTableName]', i.indid,  2) or    

     c.name = index_col ('[YourTableName]', i.indid,  3) or    

     c.name = index_col ('[YourTableName]', i.indid,  4) or    

     c.name = index_col ('[YourTableName]', i.indid,  5) or    

     c.name = index_col ('[YourTableName]', i.indid,  6) or    

     c.name = index_col ('[YourTableName]', i.indid,  7) or    

     c.name = index_col ('[YourTableName]', i.indid,  8) or    

     c.name = index_col ('[YourTableName]', i.indid,  9) or    

     c.name = index_col ('[YourTableName]', i.indid, 10) or    

     c.name = index_col ('[YourTableName]', i.indid, 11) or    

     c.name = index_col ('[YourTableName]', i.indid, 12) or    

     c.name = index_col ('[YourTableName]', i.indid, 13) or    

     c.name = index_col ('[YourTableName]', i.indid, 14) or    

     c.name = index_col ('[YourTableName]', i.indid, 15) or    

     c.name = index_col ('[YourTableName]', i.indid, 16)      

     )

外鍵:

select t1.name,t2.rtableName,t2.name

from

(select col.name, f.constid as temp

 from syscolumns col,sysforeignkeys f

 where f.fkeyid=col.id

 and f.fkey=col.colid

 and f.constid in

 ( select distinct(id) 

   from sysobjects

   where OBJECT_NAME(parent_obj)='YourTableName'

   and xtype='F'

  )

 ) as t1 ,

(select OBJECT_NAME(f.rkeyid) as rtableName,col.name, f.constid as temp

 from syscolumns col,sysforeignkeys f

 where f.rkeyid=col.id

 and f.rkey=col.colid

 and f.constid in

 ( select distinct(id)

   from sysobjects

   where OBJECT_NAME(parent_obj)='YourTableName'

   and xtype='F'

 )

) as t2

where t1.temp=t2.temp

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