事情是这样的: 这是一个订单处理系统,依赖于已经存在的另一个系统的数据库(A),读写数据也是在A数据库中操作的,也就是说不能更改表结构和属性,只能通过sql语句去维护.在新增加订单的时候,向A数据库中写入订单号,订单号列的属性是唯一的,单用户使用可以确保插入的订单号唯一,但是很可能会有很多用户同时添加订单,此时应该如何确保新添加的订单的单号是唯一的?    谢谢!sql数据库

解决方案 »

  1.   

    下面给出订单号每次加1的列子新建一个表,里面就一个字段一个值,存储订单号,比如20130102每次插入A表的时候从这个表里面取值做为订单号,取完之后
    update tb set col=col+1
      

  2.   

    可以参考一下我的文章http://blog.csdn.net/dba_huangzj/article/details/7685162
      

  3.   


    规则:
    0000000001(数值类型)做为第一个订单号,以后的依次递增.
    我说的就可以实现了,第一次存放1,取完之后update 成2 ,再取update成为3......
    在取出来的数字左边加上字符串000000控制好长度保持一致就可以了。
      

  4.   


    额,搞混了...订单列不是数值的,是 nvarchar(30) 类型的.系统定义的长度为10位数字.
      

  5.   


    不对啊,你这样还是有一样的问题,就算有一张单独的表在维护,但是如果多人同时读取,也可能得到相同的订单号啊....是不是啊?不会的,在一个事务中就可以了,不会得到相同的订单号的,上面的思路是对的:
    begin tranupdate tb set col = right('0000000000'+cast(cast(col as int) + 1 as nvarchar(30)),10)commit tran