既然是MSSQL了,那为何不用事务处理呢??

解决方案 »

  1.   

    对,楼上的说得对,你用mssql中的事务处理实现上述要求。
      

  2.   

    begin transaction
    select * from mytable (tablelock holdlock)
    yourstatement
    commit transaction
      

  3.   

    因为,用的不是odbc而且这个过程中需要把值取出来。代码如下(用的是php_lib)
    function f_get_id($bm)
    {
    //input bm:ID标识,len要求的长度
    //output 返回000001这样的序列号
    global $sys_user,$sys_password,$sys_database,$sys_host;
    $conn=new DB_Sql();
    $conn->Host=$sys_host;
    $conn->User=$sys_user;
    $conn->Password=$sys_password;
    $conn->Database=$sys_database;
    $conn->connect();
    //craticle section
    //get length
    $query="select bm_len from id_set where bm='$bm'";
    $conn->query($query);
    $conn->next_record();
    $len=$conn->f(bm_len);
    //increase the record
    $query="update id_set set bm_val=bm_val+1 where bm='$bm'";
    $conn->query($query);
    $m_zero='';
    $query="select bm_val as max_num from id_set where bm='$bm'";
    $conn->query($query);
    $conn->next_record();
    for ($i=0;$i<$len-strlen($conn->f(max_num));$i++)
    {
    $m_zero.='0';
    }
    //end section
    return $m_zero.$conn->f(max_num);
    }
      

  4.   

    如果是用odbc的话就好办了。直接在critcle section 前面加排它锁。在end section后面解锁。
    关键是不是用的那个东西。而且用自动真家的字段在我们的系统里面是不允许的。(考虑的系统的移植性)所以请提供类市与asp中odbc加锁解锁的代码。