Gy_Maxnumber 设为主键更新前改表名   :)

解决方案 »

  1.   

    光这一句怎么会重复?update Gy_Maxnumber set NowNumBer=NowNumBer+1 where BillCode=1209
      

  2.   

    --添加排它锁。
    update Gy_Maxnumber set NowNumBer=NowNumBer+1 where BillCode=1209 WITH (XLOCK)
      

  3.   

    为了模拟ORACLE 的sequence 方法,我写了一个存储过程,不知道是否适合你
    ALTER PROCEDURE [dbo].[genNextId] 
    (
    /*生成表主键*/
    @v_tab_name  nvarchar(50), /*[1]表名*/
    @v_col_name nvarchar(50), /*[2]列名*/
    @v_n_id     bigint output /*[3]返回ID*/
    )
    AS
    --保证能够生成行锁
    BEGIN TRANSACTION TRAN1
    UPDATE code_id SET n_id = n_id + 1 WHERE c_tab_name = UPPER( @v_tab_name )
        and c_col_name = UPPER( @v_col_name )
    IF @@ROWCOUNT = 0 
    BEGIN
    --SELECT @v_n_id = MAX( @v_col_name ) FROM @v_tab_
    INSERT INTO CODE_ID (C_TAB_NAME,C_COL_NAME,N_ID) VALUES (UPPER( @v_tab_name ), UPPER( @v_col_name ), '1' )
    SET @v_n_id = 1
    END
    ELSE
    BEGIN
    SELECT @v_n_id = n_id FROM code_id WHERE c_tab_name = UPPER( @v_tab_name )
            and c_col_name = UPPER( @v_col_name )
    END
    COMMIT TRANSACTION TRAN1
      

  4.   

    有时一天好几张!!!!!!update Gy_Maxnumber set NowNumBer=NowNumBer+1 where BillCode=1209在BillCode相同的情况下,有可能同时发生?
      

  5.   

    update Gy_Maxnumber set NowNumBer=NowNumBer+1 where BillCode=1209更新自动加排它锁, 所以光这句产生不了重复的.