单号问题.

vfp_database 2001-12-17 03:40:33
数据库:SQL
如何可以做到用SQL语句做自动单号.多用户(在一百个用户左右吧)
要求年月日+单号.
今天的单号.
200112160001
200112160002
200112160003
200112160005

明天的单号是:
200112170001
200112170002
200112170003
200112180005
连续单号删除的不管.
...全文
185 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluepower2008 2001-12-19
  • 打赏
  • 举报
回复
这种对插入记录的连续编号问题,如果不使用系统的自动编号功能,一般就只能自己建立一个编号表来维护。有日期和最大编号字段,每天一条记录,在增加一条记录时,先查这个表,如果有当天的日期,取最大值加1,并修改最大编号;如果没有,就增加一条记录,并将最大编号置为1。
至于在查询和修改编号表时怎么来解决并发问题,我记得我在某个帖子时曾回答过这个问题,不过我记不住是哪个帖子,这里再说一遍吧!
你在查询最大编号之前起一个事务,然后设置隔离级别:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
之后进行查询,修改或添加操作,在整个事务提交或回滚之前,其它用户是不能访问编号表的。
流星尔 2001-12-19
  • 打赏
  • 举报
回复
to bluepower2008:
我们的单号也就是怎么制定的。通过一个编号表来查询。
bluepower2008 2001-12-19
  • 打赏
  • 举报
回复
我们可以考虑一下,查询并修改一次编号表的操作所用的时间是多长,在你的编号表为3650条以下(即10年左右的数据以下),一般为0.05秒,就是说如果一个用户要来查编号,正好碰上另一个用户也在查,他需要等0.05秒,如果100个用户同时查,那么最后一个用户要等5秒左右,你可以根据这个数字自行决定该使用什么方案。不过我说的0.05秒是经验值,你那的情况可以自己测一下。方案有很多种,但具体采用哪一种,在这里讨论也没有意义,还需要你自己动手实际测试一下。补充一点,100个用户同时查编号的情况算概率也是极小的,如果有可以,你也可以编个小程序测试一下。
vfp_database 2001-12-19
  • 打赏
  • 举报
回复
TO:bluepower2008(蓝色力量)
我明白你的意思了.
哪会不会多用户时很慢(一百用户算不算多)
流星尔 2001-12-18
  • 打赏
  • 举报
回复
同意风子,这个办法有道理。
我知道怎么写了。待我试试。
流星尔 2001-12-18
  • 打赏
  • 举报
回复
同意风子,这个办法有道理。
我知道怎么写了。待我试试。
vfp_database 2001-12-18
  • 打赏
  • 举报
回复
?????????????
vfp_database 2001-12-17
  • 打赏
  • 举报
回复
TO:fhen(风子)

具体SQL要怎么写???
fhen 2001-12-17
  • 打赏
  • 举报
回复
有两种方法:
①插入记录前用SELECT语句的WITH HOLDLOCK, TABLOCKX直到事务结束。这样可保证你所获得的最大号码在更新过程中一直有效。
②用另一表保存当天最大值,在更新事务中使用行级锁即可。这样效率会高一些。
vfp_database 2001-12-17
  • 打赏
  • 举报
回复
TO:sky_blue(蓝天)
这样做并发问题真的可以解决吗?
还有没有再简单点的办法呀?
蓝天 2001-12-17
  • 打赏
  • 举报
回复
drop table test;
go
create table test (id int identity(0001,1), date datetime);
go
insert into test values (getdate());
go
select convert(char(4),year(date))+convert(char(2),month(date))+convert(char(2),day(date))+convert(varchar(4),id) from test;
go

create view testview (a)
as
select convert(char(4),year(date))+convert(char(2),month(date))+convert(char(2),day(date))+convert(varchar(4),id) as a from test;
go
select * from testview;
go
vfp_database 2001-12-17
  • 打赏
  • 举报
回复
就算是的话。它又可以解决多用户的并发问题吗?
vfp_database 2001-12-17
  • 打赏
  • 举报
回复
TO:Free_Man(浪迹天涯)
晕...........

我要的是SQL2000呀.

不过也谢谢你了:)
Free_Man 2001-12-17
  • 打赏
  • 举报
回复
Oracle下:
select To_char(sysdate,'YYYYMMDD')||trim(to_char(XXXX+1,'0000')) from dual;
其中XXXX是旧单号的后四位.
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

34,623

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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