数据库:SQL2005
有表A和表B
B是A的从表(两者之间有主外键关系),如何查系统表知道B的主表是A?也就是说,根据表名,然后判断这个表名是否存在主外键关系,如果存在,则找到与它关联的所有主表,列出这些主表的名字

解决方案 »

  1.   

    select object_name(fkeyid) as tabname from sysforeignkeys where rkeyid = object_id('mat_master')
      

  2.   

    select object_name(fkeyid) as tabname from sysforeignkeys where rkeyid = object_id('mat_master')
      

  3.   

    谢谢,不过2楼的应该是select object_name(rkeyid) as tabname from sysforeignkeys where fkeyid = object_id('memberdetail')
    因为数据库是SqlServer2005,所以我想用目录视图sys.foreign_keys来查,但sys.foreign_keys似乎没有fkeyid这种列
      

  4.   

    已解决了,代码如下select a.* from sys.tables as a
    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
      

  5.   

    SELECT 主键表名称=object_name(b.rkeyid)
        ,主键列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表名称'
      

  6.   


    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');
      

  7.   


    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');