Oracle与SqlServer中获取所有字段、主键、外键的sql语句

本文详细介绍了如何使用SQL语句在Oracle和SQL Server中查询特定表的字段信息、主键和外键关系。通过具体实例展示了获取字段名称、类型、精度、长度以及是否为空的方法,同时提供了查询主键和外键字段名称、所引用表名及应用字段名的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle与SqlServer中获取所有字段、主键、外键的sql语句

查询某个表中的字段名称、类型、精度、长度、是否为空

  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'


我的实现:

select uc_z.table_name,uc_z.constraint_name,ucc_z.column_name,ucc_y.table_name,ucc_y.column_name,uc_z.r_constraint_name from user_constraints uc_z,USER_CONS_COLUMNS ucc_z,USER_CONS_COLUMNS ucc_y
where  uc_z.r_constraint_name = ucc_y.constraint_name
and uc_z.table_name = ucc_z.table_name
and uc_z.constraint_name = ucc_z.constraint_name
and uc_z.owner = 'GJJY'
and uc_z.status = 'ENABLED'
and uc_z.constraint_type = 'R'
and uc_z.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值