各位大侠救命:
    小弟想要删除在SqlServer中有外键约束的数据表,又不想把外键删除,所以想暂时关闭外键约束,等删除完毕再恢复外键约束,请各位大虾帮助!表名称Test
外键表Test1,字段:Filename分别为主键和外键!我是这样写的:
   Delete From Test
 错误提示:DELETE 语句与 Filename REFERENCE 约束 'FK__test__Filename__0E6E26BF' 冲突。该冲突发生于数据库 'Yh001',表 'test', column 'Filename'。语句已终止。
如果用如下Sql语句:
  TRUNCATE table yh001.dbo.test
  错误提示:
  无法截断表 'yh001.dbo.test',因为该表正由 FOREIGN KEY 约束引用。

解决方案 »

  1.   

    delete from yh001
    delete from test
      

  2.   

    打开sqlserver的企业管理器,想怎么删就怎么删
      

  3.   

    ALTER TABLE yourtable CHECK(NOCHECK) CONSTRAIT ALL
    ALTER TABLE yourtable ENABLE(DISABLE) TRIGGER ALL
      

  4.   

    信誉的方法我测试了一下,还是不行,您还有没有更好的方法,谢谢,小弟很着急!
    还有
    ALTER TABLE yourtable CHECK(NOCHECK) CONSTRAIT ALL
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: '(' 附近有语法错误。如果用
    ALTER TABLE yourtable CHECK(NOCHECK) CONSTRAIT ALL
    则:
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'CONSTRAIT' 附近有语法错误。
      

  5.   

    下例禁用用于限制可接受的薪水数据的约束。WITH NOCHECK CONSTRAINT 与 ALTER TABLE 一起使用,以禁用该约束并使正常情况下会引起约束违规的插入操作得以执行。WITH CHECK CONSTRAINT 重新启用该约束。CREATE TABLE cnst_example 
    (id INT NOT NULL,
     name VARCHAR(10) NOT NULL,
     salary MONEY NOT NULL
        CONSTRAINT salary_cap CHECK (salary < 100000)
    )-- Valid inserts
    INSERT INTO cnst_example VALUES (1,"Joe Brown",65000)
    INSERT INTO cnst_example VALUES (2,"Mary Smith",75000)-- This insert violates the constraint.
    INSERT INTO cnst_example VALUES (3,"Pat Jones",105000)-- Disable the constraint and try again.
    ALTER TABLE cnst_example NOCHECK CONSTRAINT salary_cap
    INSERT INTO cnst_example VALUES (3,"Pat Jones",105000)-- Reenable the constraint and try another insert, will fail.
    ALTER TABLE cnst_example CHECK CONSTRAINT salary_cap
    INSERT INTO cnst_example VALUES (4,"Eric James",110000)
      

  6.   

    兄弟这个也看不懂吗,我快晕了
    ALTER TABLE yourtable CHECK(NOCHECK) CONSTRAIT ALL
    是指
    ALTER TABLE yourtable CHECK CONSTRAIT ALL  --检查约束

    ALTER TABLE yourtable NOCHECK CONSTRAIT ALL --不检查约束ALTER TABLE yourtable ENABLE(DISABLE) TRIGGER ALL
    是指
    ALTER TABLE yourtable ENABLE TRIGER ALL --允放触发器

    ALTER TABLE yourtable DISABLE TRIGER ALL --禁止触发器
      

  7.   

    不好意思是,我的错在此向 youhongwei78(飞天木马) 道歉
    CONSTRAIT 为 CONSTRAINT
    TRIGER 为 TRIGGER
      

  8.   


    ALTER  TABLE  yh001.dbo.bm  NOCHECK  CONSTRAINT  ALL  delete from yh001.dbo.bmALTER  TABLE  yh001.dbo.bm  CHECK  CONSTRAINT  ALL  
    服务器: 消息 547,级别 16,状态 1,行 1
    DELETE 语句与 COLUMN REFERENCE 约束 'FK__Dw__d_s_Bmdm__0E6E26BF' 冲突。该冲突发生于数据库 'Yh001',表 'Dw', column 'd_s_Bmdm'。
    语句已终止。
      

  9.   

    dwgz你好:
    您看我这样写为啥也不行呢?
    ALTER  TABLE  yh001.dbo.bm  NOCHECK  CONSTRAINT  ALL  
    ALTER TABLE   yh001.dbo.bm  DISABLE TRIGGER ALL
    delete from yh001.dbo.bmALTER  TABLE  yh001.dbo.bm  CHECK  CONSTRAINT  ALL  
    ALTER TABLE   yh001.dbo.bm  Enable TRIGGER ALL
    服务器: 消息 547,级别 16,状态 1,行 1
    DELETE 语句与 COLUMN REFERENCE 约束 'FK__Dw__d_s_Bmdm__0E6E26BF' 冲突。该冲突发生于数据库 'Yh001',表 'Dw', column 'd_s_Bmdm'。
    语句已终止。
      

  10.   

    不好意思没有看到你的消息
    你这种情况就是外键约束的问题
    你禁用了表bm的约束但是没有禁用表dw的约束,
    也就是说你把表dw的相关联的外键删除了当然会报错,再加一句
    ALTER  TABLE  yh001.dbo.dw NOCHECK  CONSTRAINT  ALL
    如果还其他被依靠的表也要加进去,
    不过我对你这种做法置怀疑态度,你把外键删除掉了你的约束也不可能再打开,因为你破坏了数据的完整性除非是特殊应用  
      

  11.   

    DWGZ :
      您好!
      其实我是在用SQL恢复数据表,仅仅进行恢复主表,其它的表不进行恢复,所以才这样做的
    先删除,然后用备份的表进行全添加。
      你的意思是不是说如果有约束的子表也要进行取消约束,那我咱样才能在系统表查到与其
    相关联的子表哪?不胜感激
      

  12.   

    DWGZ:
       其实我也是这样做的,但是我得进进行恢复时就得先删除原有的数据表中的内容,然后
    进行恢复,在恢复前,就得先删除原有数据,所以问题就出来了:)嘿嘿
       不好意思!