SELECT 主键列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.rkeyid)='titles'

解决方案 »

  1.   

    但是,如果以后数据库结构改变,甚至可能出现C表,D表和 A.a 进行关联
    那么不就要每次都改? 能不能有一个方法可能自动检查 A.a 的某行记录是否 Deleteable?
      

  2.   

    查你要删除的值在外键表中是否存在,不存在则删除?
    if not exists(select 1 from b , a where b.a = a.a and a.a = '...')
       delete from a where a = '...'或者
    if not exists(select 1 from b where a = '...')
       delete from a where a = '...'
      

  3.   


    我的意思是  2个表存在 关系约束对于外键约束来说, 是 对表B.a 列进行约束的吧? 也就是当删除 A.a 的记录时,不能让表B的记录违法这个约束
    然而,并不是所有A的记录的删除,都会让表B的记录违法这个约束 
      

  4.   

    如果b.a引用a.a那就是这样。 即b.a引用的a.a的值是在a.a中存在的。