我在数据库中自己生成一个按指定规则生成的编号,我怎么保证自己这个编号被申请好后,在别的用户申请时不把该编号提供给别的用户呢?

rehearts 2007-11-18 07:14:17
比如 a 注册的时候,生成一个编号,01001 但是如果同时有用户在申请,我怎么能保证这个号只给当前的用户用呢,而不被别的并发的用户抢注册掉呢
...全文
120 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2007-11-18
  • 打赏
  • 举报
回复
最简单且安全的作法就是用个identity列.
比如某个用户注册后 identity 列值为 23
你要输出 000023 ,那么就是显示问题了.

当然,你希望表中存这样的数据也可以. 用个计算列就可以了.

CREATE TABLE tb(OrderID INT IDENTITY(1,1),OrderSerial AS RIGHT('000000000' + RTRIM(OrderID),10),V VARCHAR(10))
INSERT tb(v) SELECT 'aa'
UNION ALL SELECT 'bb'

SELECT * FROM tb

DROP TABLE tb
jwt1982 2007-11-18
  • 打赏
  • 举报
回复
呵呵,最大加1是一种算法,但是不能保证中间删除后,继续补单据号

可另存一表,生成单据号时,插入到该表中,并标记为某客户使用,等该数据保存至数据库中,在该表中删除该记录。

如未保存,在客户窗体关闭时,删除该单据号。

删除单据时,将单据号,存入该表,

多客户使用时,先查询是否有未使用单据号,直接获得该单据号即可,交替配合1楼既可获得最新单据号。



-狙击手- 2007-11-18
  • 打赏
  • 举报
回复
是也, 
internetroot 2007-11-18
  • 打赏
  • 举报
回复
用1楼的方法很方便。每被取一次后就将该值增加1。永不重复。

中国风 2007-11-18
  • 打赏
  • 举报
回复
楼主也可用触发器、函数实现。。以下为实现自编号的使用例子楼主可参考
http://blog.csdn.net/roy_88/archive/2006/12/01/1424370.aspx
中国风 2007-11-18
  • 打赏
  • 举报
回复
用一个表记录最大号(此方法叫单号记数器)
--取一个在更新最大号加1

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧