SQL找出一个外键所被引用过的表
比如我有一个外键字段叫做Plan01_FK,我怎么样在这个SQL数据中查找出有Plan01_FK这个外键的表呢...
比如我有一个外键字段叫做Plan01_FK ,我怎么样在这个SQL数据中查找出有Plan01_FK 这个外键的表呢
展开
2个回答
2013-08-04
展开全部
select
oSub.name AS [子表名称],
fk.name AS [外键名称],
SubCol.name AS [子表列名],
oMain.name AS [主表名称],
MainCol.name AS [主表列名]
from
sys.foreign_keys fk
JOIN sys.all_objects oSub
ON (fk.parent_object_id = oSub.object_id)
JOIN sys.all_objects oMain
ON (fk.referenced_object_id = oMain.object_id)
JOIN sys.foreign_key_columns fkCols
ON (fk.object_id = fkCols.constraint_object_id)
JOIN sys.columns SubCol
ON (oSub.object_id = SubCol.object_id
AND fkCols.parent_column_id = SubCol.column_id)
JOIN sys.columns MainCol
ON (oMain.object_id = MainCol.object_id
AND fkCols.referenced_column_id = MainCol.column_id)
自己在最后 加一个 WHERE fk.name = 'Plan01_FK'
注: 上面的 SQL Server 2008 下的 sql 语句。
展开全部
SELECT *FROM sys.tables st --系统表,用于存放当前库的所有表(含系统表和自定义表)
WHERE EXISTS(SELECT 1 FROM sys.objects so--系统表,用于存放数据库所有对象(表、视图、存储过程、函数、主键、外键、约束等数据库统称的对象)
WHERE st.object_id=so.parent_object_id --so的父ID 要么表名要么视图
AND so.type='f' --so.type='f'代表当前检索的为外键
AND so.name='Plan01_FK') --要查找的外建名
--以上语句SQLSERVER适用,如其他数据库引擎,请参照对应的系统表
WHERE EXISTS(SELECT 1 FROM sys.objects so--系统表,用于存放数据库所有对象(表、视图、存储过程、函数、主键、外键、约束等数据库统称的对象)
WHERE st.object_id=so.parent_object_id --so的父ID 要么表名要么视图
AND so.type='f' --so.type='f'代表当前检索的为外键
AND so.name='Plan01_FK') --要查找的外建名
--以上语句SQLSERVER适用,如其他数据库引擎,请参照对应的系统表
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询