数据库:SQL2005
有表A和表B
B是A的从表(两者之间有主外键关系),如何查系统表知道B的主表是A?也就是说,根据表名,然后判断这个表名是否存在主外键关系,如果存在,则找到与它关联的所有主表,列出这些主表的名字
有表A和表B
B是A的从表(两者之间有主外键关系),如何查系统表知道B的主表是A?也就是说,根据表名,然后判断这个表名是否存在主外键关系,如果存在,则找到与它关联的所有主表,列出这些主表的名字
调试欢乐多
因为数据库是SqlServer2005,所以我想用目录视图sys.foreign_keys来查,但sys.foreign_keys似乎没有fkeyid这种列
join
(select referenced_object_id from sys.foreign_keys where parent_object_id=object_id('memberdetail')) as b
on b.referenced_object_id=a.object_id
,主键列ID=b.rkey
,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid)
,外键表ID=b.fkeyid
,外键表名称=object_name(b.fkeyid)
,外键列ID=b.fkey
,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid)
,级联更新=ObjectProperty(a.id,'CnstIsUpdateCascade')
,级联删除=ObjectProperty(a.id,'CnstIsDeleteCascade')
FROM sysobjects a
join sysforeignkeys b on a.id=b.constid
join sysobjects c on a.parent_obj=c.id
WHERE a.xtype='F' AND c.xtype='U'
AND object_name(b.fkeyid)='B表名称'
select quotename(OBJECT_SCHEMA_NAME(referenced_object_id))+'.'+
quotename(OBJECT_NAME(referenced_object_id))
from sys.foreign_keys
where parent_object_id=object_id('tabname');
select name foreign_key_name,
quotename(OBJECT_SCHEMA_NAME(referenced_object_id))+'.'+
quotename(OBJECT_NAME(referenced_object_id)) referenced_table_name
from sys.foreign_keys
where parent_object_id=object_id('tabname');