要想控制共享冲突,就要利用锁,你可以先执行update的语句把相关记录锁定,然后再处理,但这种方法如果用户用户阻塞严重会容易产生锁。要想解决,最好把设计思路改一下,把编号变成2个字段,一个字段保存地名缩写,一个字段保存序号,序号列可以使用Identify属性。

解决方案 »

  1.   

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE是为了防止在事务没有完成的时候另一用户,访问事务内,未提交的数据
    create table Table1 (a int)
    go
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    begin tran
      insert table1 values(1)               ----这句在事物没有commit前,被另一个用户
                                            ----访问是错误的,应为下面有可能会出错  insert table1 values('aaa')           ----这句由于类型不一样将报错
                                            ----设置了SERIALIZABLE的话就不会发生脏读
    commit transelect * from table1
      

  2.   

    服务器: 消息 1205,级别 13,状态 54,过程 xxx,行 15
    事务(进程 ID  64)与另一个进程已被死锁在  lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务。
    ----------------------------------------------------------------------
    这个事务错怎么处理?
      

  3.   

    写自定义函数生成最新的编号,再给字段加默认值:dbo.yourFun()