在SQLSERVER2005中添加外键(不是用SQL语句,用的界面操作),提示错误
ALTER TABLE语句与FOREIGN KEY约束(约束名)冲突,该冲突发生于数据库 ‘(数据库名)',表 '(表名)', column  '(列名)'。请问这是什么原因造成的,应该如何解决?
 

解决方案 »

  1.   

    這樣查看一下,是否表已存在同名約束這里舉個例
    USE tempdb
    GO
    CREATE TABLE t(ID INT UNIQUE)CREATE TABLE t2(ID INT CONSTRAINT FK_T REFERENCES T(ID))
    GO
    SELECT  OBJECT_NAME(constid) AS 約束名,OBJECT_NAME(ID) AS 表名  FROM sys.sysconstraints WHERE ID=OBJECT_ID('T2')
      

  2.   

    子表和主表都有该字段的。而且该字段是主表的主键。
    但是奇怪的是,SQL2005里建好了外键,在“键”这一栏中只能看到主键(PK打头的)。但是点添加外键时,该外键却已经存在了。是不是哪里没设置好。我操作的具体步骤是,点击要设置外键的表,选“列”,找到要设置外键的列,点击“修改”,在该列上点击“关系”,在关系中添加外键关系;然后再设置好主表子表,以及主表的主键和子表的外键(相同)。。然后点保存的时候就出错了。。(我在子表设置完这个关系,然后去主表里查看,也有这个同名关系。而且删除其中一个,另一个也就没了。重命名其中一个,另一个也就跟着重命名了。应该是属于同一个关系吧。)以上是我操作的详细步骤,不知是哪里弄错了呢?我用SQL2005没多久,不怎么熟悉,还望各位前辈多多指教啊。。
      

  3.   


    谢谢11L朋友,我在SQL2005中点表右键菜单,分别是新建表,修改,打开表,编写表脚本,查看依赖关系,重命名,删除,刷新,属性。没有“设计表”的选项。我想您说的是不是SQL05中的修改表中的“关系”选项呢?我在那里可以看到外键。。但是在“键”一栏中没有显示外键关系。
      

  4.   

    原因: 因为外键字段的字段内容里,含有被参考表(被参考字段)中不存在的值,
         所以无法建立外键约束.解决方法: 删除不存在的字段值的记录,然后重建外键约束.-- 删除记录
    delete from 表名 t
    where not exists(select 1 from 被参考表 where 被参考字段=t.外键字段)-- 再建外键约束
    [界面操作即可,代码略.]