因为主外键的约束关系,比如,table a 的field_a 是主键,table a 的field_b 是外键。
field_a中有值 test,field_b中也有值test.
如果直接删除field_a 中的test,就会出错。
办法:先删除field_b 中的test,在删除field_b中的test.

解决方案 »

  1.   

    同意楼上两位的方法。
    如果要实现删除双亲表记录的同时,也删除子表从属行,在oracle或informix中可以在建外键时加上on delete cascade选项,不清楚sqlserver是否支持此功能,确实不行的话可以自己编写触发器来完成。
      

  2.   

    如果你用的是sql server不能用触发器!
    如果是oracle可以!
    其实最好的方法是在前台处理这个问题!那样你可以找到其对应的记录删除以后再删除你要删除的记录!
      

  3.   

    sqlserver不支持级联删除。自己编吧,也不是很麻烦。
      

  4.   

    如果你用的是sql server不能用触发器?sql server当然能用触发器
      

  5.   

    在两个表存在关联关系而且是在7版本中不能通过触发器来执行级联删除,因为7中的触发器类似于after 触发器,也就是说在执行完数据库自身的delete后再执行trigger,那么此时外键约束已经发生冲突,所以这个办法不行.但调用存储过程可以比较简单的完成,因为它可以控制删除次序:
    例表:
    create table master (id int primary key,name varchar(10));
    create table detail (id int,par_id int references master(id));级联删除存储过程
    create proc casdel @id int
    as
    delete from detail where par_id =@id
    delete from master where id=@id插入示例数据
    insert into master values(1,'a')
    insert into master values(2,'b')
    insert into detail values(1,1)
    insert into detail values(2,1)
    insert into detail values(3,1)执行存储完成级联删除
      exec casdel 1
      

  6.   

    谁说sql server不能用触发器!给你一个例子:
    create TRIGGER tablemasterDelete
    ON dbo.tablemaster
    FOR DELETE
    AS
      delete tabledetail
      from tabledetail,deleted 
      where tabledetail.field_key=deleted.field_key
      

  7.   

    我发贴发不起来,只好贴在这儿了。请求高手指教!!!!我用VC++设计了一个存取sql server7.0 数据库的程序时,
     碰到了几个问题: 1、db.ExecuteSQL("select curphase from tbsysmsg");
         结果连接到本机(window 98,桌面版)时,读取正确,curphase="200101"
    (2001年第一期);
         而连接到服务器(NT4.0 服务器版)时,cuphase为什么会等于"20010",少了一位?  2、同样,在连接到本机时读取数据很完整,当连接到服务器,还有一部份
         满足条件的记录怎么读不出来?记录条数少于1000个。
         
         多次重试,结果是一样的。
      
      摆脱各位了!!!