事情是这样的: 这是一个订单处理系统,依赖于已经存在的另一个系统的数据库(A),读写数据也是在A数据库中操作的,也就是说不能更改表结构和属性,只能通过sql语句去维护.在新增加订单的时候,向A数据库中写入订单号,订单号列的属性是唯一的,单用户使用可以确保插入的订单号唯一,但是很可能会有很多用户同时添加订单,此时应该如何确保新添加的订单的单号是唯一的? 谢谢!sql数据库
调试欢乐多
update tb set col=col+1
规则:
以0000000001(数值类型)做为第一个订单号,以后的依次递增.
我说的就可以实现了,第一次存放1,取完之后update 成2 ,再取update成为3......
在取出来的数字左边加上字符串000000控制好长度保持一致就可以了。
额,搞混了...订单列不是数值的,是 nvarchar(30) 类型的.系统定义的长度为10位数字.
不对啊,你这样还是有一样的问题,就算有一张单独的表在维护,但是如果多人同时读取,也可能得到相同的订单号啊....是不是啊?不会的,在一个事务中就可以了,不会得到相同的订单号的,上面的思路是对的:
begin tranupdate tb set col = right('0000000000'+cast(cast(col as int) + 1 as nvarchar(30)),10)commit tran