数据操作处理方式:
    ID号按顺序自动生成1~~n,现在多用户同时对数据表进行多表添加操作(有部分表单信息需要记录当前ID号)。问题:
    采用何种数据处理方式更易适应多用户操作中的各种可能性(要求ID号最先生成,但这样如果多用户同时添加数据,有些用户中途撤销添加操作,如何处理ID号分配?)

解决方案 »

  1.   

    撤销添加?你用UPDATEBATCH呀,用批更新,在用户确定添加的时候就添加~
      

  2.   

    create  procedure insert_rs_px_zt
    --主表中的各个字段
    @rs_px_jh bigint,
    @rs_px_subject varchar(8000)='',
    @rs_px_zt_ks int,
    @rs_px_zt_js varchar(8000)='',
    @rs_px_zt_fuser bigint,
    @rs_px_zt_xs varchar(8000)='',
    @rs_px_zt_btime datetime,
    @rs_px_zt_etime datetime,
    @rs_px_zt_address varchar(8000)='',
    @rs_px_zt_nr varchar(8000)='',
    @rs_px_zt_md varchar(8000)='',
    @rs_px_zt_bz varchar(8000)='',
    @rs_px_zt_cuser bigint
    as
    begin 
    set nocount on
    --插入的各个字段(注意,表中的主键是自动编号)
    insert into rs_px_zt(rs_px_jh,rs_px_subject,rs_px_zt_ks,rs_px_zt_js,rs_px_zt_fuser,rs_px_zt_xs,rs_px_zt_btime,rs_px_zt_etime,rs_px_zt_address,rs_px_zt_nr,rs_px_zt_md,rs_px_zt_zt,rs_px_zt_bz,rs_px_zt_cuser,rs_px_zt_ctime)
    values(@rs_px_jh,@rs_px_subject,@rs_px_zt_ks,@rs_px_zt_js,@rs_px_zt_fuser,@rs_px_zt_xs,@rs_px_zt_btime,@rs_px_zt_etime,@rs_px_zt_address,@rs_px_zt_nr,@rs_px_zt_md,0,@rs_px_zt_bz,@rs_px_zt_cuser,getdate())
    --返回刚才插入的最后id
    select IDENT_CURRENT('rs_px_zt')
    /*因为在sql内部存储过程会自己排队执行的,因此在处理容易产生并发操作的插入时候采用存储过程,
    说白了就是不管你用户多少,只要插入都用一个存储过程,他会一个一个给你排队执行
    像你的情况 如果中途取消就不提交到保存页面,提交到保存页面可以先保存主表("存储过程"),然后根据存储过程返回的主表id对子表进行操作*/
    set nocount off
    end
      

  3.   

    如果同时3个用户使用,开始获得的ID号为K1,K2,K3,那其中一个中途撤销添加,那最后的添加怎么解决?
      

  4.   

    id 不是开始获得,而是添加后获得 ok?
      

  5.   

    我写个详细例子吧:
       用户甲、乙、丙同一时间添加纪录,假设3人顺序点开表单所获得的ID号为kd1、kd2、kd3,添加的数据包含几个数据表,都必须记录当前ID号:表1添加对应ID的一条数据,表2添加对应ID的N条记录,
    表3......
       用户乙在加好几个表的数据之后突想撤销当前的数据添加,即想取消ID为kd2的相关数据,那最后记录的时候ID号如何处理?其中:ID号要求开始点击添加新数据的时候立即按顺序生成一个,kd1,kd2,kd3,...,kdn
      

  6.   

    就是要求首先获得id号,正在头大ing...
      

  7.   

    start:   获得IDsave:   递归校验ID是否重复
       maxID+1
       重复的话给用户一个提示   保存maxID
      

  8.   

    TO:yas(新一代的矿工) 
    id 开始获得,肯定是按次序生成的一个,不会有重复的现象我现在的问题是,几个人获得一组安次序生成的id,其中某些人要撤销操作,那相应的id就相当于空出来的,这个问题如何解决?假如主数据表中有I条记录(I=1 TO N,N∈∞),甲、乙、丙、丁同时向主表添加新数据,各自获得的ID号为kd(i+1),kd(i+2),kd(i+3),kd(i+4),其间四个人各自在M个副表里加了J(J=1 TO N,N∈∞)条ID为kd(i+1),kd(i+2),kd(i+3),kd(i+4)的记录。
        在最后确认之前,丙撤销了添加操作,即ID为kd(i+3)的所有记录都取消,那其他三人点击确认时主表中的ID号序列如何处理?
        若丙撤销操作之前有第5个人添加新记录,那得到的ID就是kd(i+5),丙撤销操作后ID又该如何排序?
        实际应用中随时都可能有新的数据插入主表,操作者开始操作时就要得到一个ID,这时该如何处理ID号?
        
        这是我一企业项目中遇到的一个问题,目前的解决方案是对公司内部操作者提出强制要求:ID号不能撤销......
        失败ing...
      

  9.   

    获取时不保存max_id不就OK了?楼主死脑筋
      

  10.   

    TO: yas(新一代的矿工) 
    不保存获得的id,那假如用户开始得到的ID为kd19,保存后却发现成了kd16或者其他的id,那他会怎么想???