select
'Table is referenced by foreign key' =
db_name() + '.'
+ rtrim(user_name(ObjectProperty(fkeyid,'ownerid')))
+ '.' + object_name(fkeyid)
+ ': ' + object_name(constid)
from sysreferences where rkeyid = object_id('T1') order by 1

解决方案 »

  1.   

    --查询一个表的所有外键: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'
      

  2.   

    楼上各位高人,谢谢,可能小弟表述不是很好..--------------------
    CREATE TABLE T1 (
    [A] [int] CONSTRAINT [Pri_A] PRIMARY KEY,
    [Col1] [varchar] (12)) GO
    --------------------------
    Create table T2(Col2 varchar(12) primary key,B int Constraint for_A  foreign key
                    references T1(A) on update Cascade )
    --------------------------------
    T1表
    列名 A  Col1
         11  A
         22  B
         33  C
         44  DT2表
       Col2 B
       AA,  11--------------问题是怎么判断这个引用了11这个值.
                            当我们删除T1表中的11时,这时就报错。 
                            问题就是要判断这个主键列A中的11被引用了还有T3,T4,T5都不详,因为小弟菜边开发边建表.
      

  3.   

    if not exists( select 1 from T2 where B = '11' )
        delete from T2 where A = '11'
    else
        raiserror('...', 16, 1)
      

  4.   

    if not exists( select 1 from T2 where B = '11' )
        delete from T1 where A = '11'
    else
        raiserror('...', 16, 1)