我做了一个触发器,当根据判断条件向另一个表中插入数据时,总提示“无法为更新行定位。一些值可能已在最后一次读取后已更改”错误,但数据还是能够插入到表中,该如何处理,请指教。CREATE TRIGGER [remainupdate] ON [dbo].[tbWZGoodsLocation] 
FOR UPDATE
ASdeclare @mygoodsnum int
declare @mylocation int
declare @mygoodsplaceno varchar(20)if update(goodsplaceno) 
 begin
   set @mygoodsnum=(select goodsnum from Inserted)
   set @mylocation=(select location from Inserted)
   set @mygoodsplaceno=(select goodsplaceno from Inserted)   select * from [dbo].[tbWZGoodsRemainNumber] where goodsnum=@mygoodsnum and location=@mylocation and goodsplaceno=@mygoodsplaceno
   if @@ROWCOUNT<1
   begin
      insert into [dbo].[tbWZGoodsRemainNumber] (goodsnum,location,goodsplaceno) values(@mygoodsnum,@mylocation,@mygoodsplaceno)
   end 
 end

解决方案 »

  1.   

    set @mygoodsnum=(select goodsnum from Inserted)
    set @mylocation=(select location from Inserted)应该把Inserted改成Deleted把
      

  2.   

    是你用过触发器后,客户端与服务器端的数据不一致造成的,你可以在提交后将数据集CLOSE,然后重新根据条件打开,就不会有问题了。
      

  3.   

    应该要加上SET NOCOUN ON
    SET NOCOUNT OFF 吧,是基础的,
      

  4.   

    CREATE TRIGGER [remainupdate] ON [dbo].[tbWZGoodsLocation] 
    FOR UPDATE
    ASdeclare @mygoodsnum int
    declare @mylocation int
    declare @mygoodsplaceno varchar(20)if update(goodsplaceno) 
     begin
       set @mygoodsnum=(select goodsnum from Inserted)
       set @mylocation=(select location from Inserted)
       set @mygoodsplaceno=(select goodsplaceno from Inserted)   select * from [dbo].[tbWZGoodsRemainNumber] where goodsnum=@mygoodsnum and location=@mylocation and goodsplaceno=@mygoodsplaceno
       if @@ROWCOUNT<1
       begin
          insert into [dbo].[tbWZGoodsRemainNumber] (goodsnum,location,goodsplaceno) values(@mygoodsnum,@mylocation,@mygoodsplaceno)
       end 
      else
      rollback    /*好象应该加上这句*/
     end
      

  5.   

    看楼主好像是在DELPHI出错的,给你个建议啊,脱离开数据库读写。