我建了这样一个触发器:
CREATE TRIGGER del_rk_tri ON [dbo].[rk] 
FOR  DELETE 
AS
declare  @dtno  char(10)
declare  @ysno char(10)
select @dtno=dth,@ysno=ysbh from deleted
delete rk_mx where rk_mx.dth=@dtno and rk_mx.ysbh=@ysno
目的是为了当删除主表[rk]表中的一条记录将删除明细表[rk_mx]中与主表
(dth,ysbh)相同的所有记录,
在SQL SERVER2000可以删除[rk]表中的记录且不会报错,
但在DELPHI7编程中,当删除[rk]表中的记录时会出现这样的错误:
“无法为更新行集定位:一些值可能已在最后读取后改变。”
可是在回到SQL SERVER2000中,记录又被删除了
不知什么原因,请高手多多帮忙,谢谢!

解决方案 »

  1.   


    1 你这个触发器有问题,如果是批量删除很可能会因为你只取一条记录而造成数据完整性的破坏
    CREATE TRIGGER del_rk_tri ON [dbo].[rk] 
    FOR  DELETE 
    AS
    select @dtno=dth,@ysno=ysbh from deleted
    delete rk_mx where rk_mx.dth=a.dth and rk_mx.ysbh=a.ysbh
    from deleted a
    2 建议不要使用触发器进行数据完整性的维护,而使用存储过程
    3 你在delphi中是如何写的,用的什么控件?
      

  2.   

    不好意思,上面错了
    CREATE TRIGGER del_rk_tri ON [dbo].[rk] 
    FOR  DELETE 
    AS
    delete rk_mx where rk_mx.dth=a.dth and rk_mx.ysbh=a.ysbh
    from deleted a
      

  3.   

    CREATE TRIGGER del_rk_tri ON [dbo].[rk] 
    FOR  DELETE 
    AS
    delete rk_mx where rk_mx.dth=a.dth and rk_mx.ysbh=a.ysbh
    from rk a