当前位置: 代码迷 >> Sql Server >> 怎么根据表名查询出表内的外键列名以及外键对应的主键表名和主键字段
  详细解决方案

怎么根据表名查询出表内的外键列名以及外键对应的主键表名和主键字段

热度:58   发布时间:2016-04-24 09:24:44.0
如何根据表名查询出表内的外键列名以及外键对应的主键表名和主键字段?
如何根据表名查询出表内的外键列名以及外键对应的主键表名和主键列名?
在网上搜了好多,都没有能直接解决的,比如下面这第一段代码,能根据表名查出表内外键列所对应的主键表名和主键列名,但是没有外键列名:

SELECT a.NAME AS 约束名 , 
OBJECT_NAME(a.[parent_object_id]) 外键表,
OBJECT_NAME(a.[referenced_object_id]) 主键表,
c.NAME AS 主键列
FROM sys.foreign_keys  AS a
JOIN sys.foreign_key_columns  AS b ON a.[object_id]=b.[constraint_object_id]
JOIN sys.columns AS c ON b.[referenced_object_id]=c.[object_id] AND b.[referenced_column_id]=c.[column_id] 
JOIN sys.columns AS d ON b.[parent_object_id]=d.[object_id] AND b.[parent_column_id]=d.[column_id]  
WHERE OBJECT_NAME(a.parent_object_id)='student'


而下面这段又能根据表名查出外键列名和对应的主键表名,缺少主键列名:

select c.name AS '外键名',OBJECT_NAME(f.referenced_object_id) AS '主键表名' from sysobjects s
inner join sysforeignkeys k on k.constid=s.id
inner join syscolumns c on c.id=k.fkeyid and k.fkey=c.colid
inner join sys.foreign_keys f on s.name=f.name
where OBJECT_NAME(parent_obj)='student' and s.xtype='F'  


怎么整合起来呢?或者有没有更简单的?
------解决思路----------------------
SELECT T1.name[约束名],T3.name[外键表],T4.name[外键列名]
,T5.name[主键表],T6.name[主键列名]
FROM SYS.FOREIGN_KEYS T1
JOIN SYS.FOREIGN_KEY_COLUMNS T2 ON T1.parent_object_id=T2.parent_object_id
JOIN SYS.SYSOBJECTS T3 ON T1.parent_object_id=T3.id
JOIN SYS.SYSCOLUMNS T4 ON T2.parent_object_id=T4.id AND T2.parent_column_id=T4.colid
JOIN SYS.SYSOBJECTS T5 ON T1.referenced_object_id=T5.id
JOIN SYS.SYSCOLUMNS T6 ON T2.referenced_object_id=T6.id AND T2.referenced_column_id=T6.colid
WHERE T1.parent_object_id=OBJECT_ID('student')
  相关解决方案