tbl1id  value  modifystamp
1    2       <binary>为了防止不同人修改value
我如何做
先select 后update?
能不能写出来?

解决方案 »

  1.   

    我觉得应该先select,后update
    如果select的时间戳,和update时不一样
    第二个人就不该update我的语句不会写
      

  2.   

    用触发器就行了
    create table ta(id int ,name varchar(10))
    insert ta select 1,'a'
    insert ta select 2,'b'create trigger test_tr on ta
    for update
    as
    if update(id)
    begin
             raiserror('不能更新',16,1)
    rollback tran
    return
    return 
    end
    --测试
    update ta set   id=10
    select * from ta
    id          name       
    ----------- ---------- 
    1           a
    2           b(所影响的行数为 2 行)
      

  3.   

    先select 后update?
    用instead of update这个类型的触发器
      

  4.   

    select 
    id,value, CONVERT( binary(8),convert( char(8),modifystamp)   from tbl1 where id=1UPDATE  tbl1 SET value = '1216' WHERE id=1 and CONVERT( binary(8),convert( char(8),@@dbts )) = '0x0000000000001A7b' 
    ---'0x0000000000001A7b' 是我从上面select出来的 
    但这样不对 
    CONVERT( binary(8),convert( char(8),@@dbts )) = '0x0000000000001A7b' 
    不成立
      

  5.   

    lz是不是昨天你问题的那个先 select 后update 再insert  的问题?
      

  6.   

    对阿。
    我现在换思路了2个用户同时
    select 数据
    下一步直接update了
    如果已经更新过,第二个用户就需要重新select了
      

  7.   

    我是先update状态位再select + 状态位.
    如果在毫秒级上两个人同时update了,锁就让他锁住吧,呵呵.
      

  8.   

    UPDATE 
        tbl1 SET value  = '1219' 
    WHERE 
         id=1 and @@dbts =( select modifystamp from tbl1 )update语句前后都 select value 来判断update是否成功