用VC写了两个处理采集数据的线程.
两个线程都调用了存储过程,一个线程是处理完数据,删除采集数据.如:--处理业务....DELETE cj_line WHERE cj_lsh = @cj_lsh and cj_ip = @cj_ip另一个线程是不停的向表插入采集数据.
IF NOT EXISTS(SELECT * FROM cj_line WHERE cj_ip = @cj_ip AND cj_date = @cj_date )
BEGIN
            --插入数据
     INSERT cj_line(cj_lsh,cj_ip,data_type,cj_data,cj_date)
      VALUES(GETDATE(),@cj_ip,@data_type,@cj_data,@cj_date)
END 表cj_line字段cj_lsh和cj_ip是主键偶尔在插入数据的时候会出现"行句柄引用了一个已被删除的行或被标识为删除的行"的错误,不知道为什么会产生的问题.是什么原因造成的.

解决方案 »

  1.   

    用事务处理begin tran
    DELETE cj_line WHERE cj_lsh = @cj_lsh and cj_ip = @cj_ip另一个线程是不停的向表插入采集数据.
    IF NOT EXISTS(SELECT * FROM cj_line WHERE cj_ip = @cj_ip AND cj_date = @cj_date )
    BEGIN
                --插入数据 
         INSERT cj_line(cj_lsh,cj_ip,data_type,cj_data,cj_date)
          VALUES(GETDATE(),@cj_ip,@data_type,@cj_data,@cj_date)
    END commit tran
      

  2.   


    delete 和 insert 这两个处理不是放在一块的
      

  3.   

    正解,否则会出现同一个表即在做Insert 也在做 Delete 的动作,会出现这种概率的!
      

  4.   


    delete 和 insert 这两个处理不是放在一块的每一边都用事务处理