单号问题.

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

明天的单号是:
200112170001
200112170002
200112170003
200112180005
连续单号删除的不管.
...全文
192 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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是旧单号的后四位.
快递单号转换软件有哪些?推荐几款好用的工具! 如何通过拼多多单号转换淘宝单号,实现订单同步物流? 抖店自行寄件发货有困难?不妨试试抖音转单号工具! 无货源如何开通电子面单?让发货更加便捷! 快递单号伪造软件:危险还是便利的工具? 解密彩虹工具箱的无货源单号转换功能:帮你顺利发货! 【抖音小店发货新技巧】不开通电子面单也能轻松发货! 揭秘!无货源发货如何使用电子面单,让你的订单更高效! 无货源?一件代发?如何填写快递单号,让你的订单畅通无阻! 快递单号转换神器,解决无货源发货难题! 无货源发货不用愁!一键解决单号问题,让你的订单更轻松! 抖店发货失败?试试电子面单,让你的订单更快捷! 无货源发货不用愁!用这款工具轻松解决单号问题! 不开通电子面单也能发货?这个方法让你的订单更便捷! 无货源发货不用愁!这个软件让你的单号转换更简单! 如何解决无货源发货的单号问题?这个方法让你的订单更高效! 无货源如何解决单号问题?无货源单号转换工具助你轻松搞定! 无需开通电子面单,也能发货!这款快递单号制作器 APP 你值得拥有。 如何转换抖音电子面单?这个电子面单转换器你一定要知道! 还在为无货源发货而

34,838

社区成员

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

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