求助关于查询数据库并自增流水号的办法

数据库环境 SQL SERVER2019

数据库:“RIVANFR11” 编码保存字段“物料编码”

B4为前缀引用单元格的变动值,目前准备固定为三个字符,举例CP1/CP3/CP5之类

CONCATENATE(B4,  format(sql("RIVANFR11", "SELECT max(right(物料编码,4)*1) maxid FROM dbo.jczl_wl where SUBSTRING(物料编码,1,3)=CONVERT(varchar(100), GETDATE(), 112)", 1, 1) * 1 + 1, "000"))

上面代码是改自论坛的一个帖子,目前问题是不能自增流水号,

目前这段代码的效果为CP1001 CP3001也就是B4单元格的值是可以应用的,

并不能实现自增加

想要实现的编号效果

根据前缀找到最大流水号然后+1

如果CP1003为最大流水号,那本次提交的流水号就是CP1004

CP1001 CP1002 CP1001 

CP3001 CP3002 CP3003

也就是在前缀"CP1"或“CP3”的基础上增加流水号

FineReport Rivan 发布于 2023-3-9 09:25 (编辑于 2023-3-9 10:26)
1min目标场景问卷 立即参与
回答问题
悬赏:13 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
CD20160914Lv8专家互助
发布于2023-3-9 09:58(编辑于 2023-3-9 10:30)

单元格里面出来这个不就是你要的了?这样你再结合你的公式加上对应类型最大的id不就行了?

CONCATENATE(a2, format(sql("RIVANFR11", "SELECT max(right(物料编码,4)*1) maxid FROM dbo.jczl_wl where SUBSTRING(物料编码,1,3)=CONVERT(varchar(100), GETDATE(), 112)", 1, 1) * 1 + &b2, "000"))

WorkBook3.rar

--------------------

image.png

  • Rivan Rivan(提问者) 马上测试,谢谢
    2023-03-09 10:02 
  • Rivan Rivan(提问者) 这个不能去取数据库字段中的最大值吧?然后加1把?
    2023-03-09 10:20 
  • CD20160914 CD20160914 回复 Rivan(提问者) 可以的呀,你拼你的公式就可以了呀。
    2023-03-09 10:22 
  • CD20160914 CD20160914 回复 Rivan(提问者) 我只是把单元格里面这样按组生成了后面的序号,你再拼你上面sql的公式就可以了呀。
    2023-03-09 10:22 
  • Rivan Rivan(提问者) 回复 CD20160914 方便帮忙拼一下嘛
    2023-03-09 10:25 
最佳回答
1
Z4u3z1Lv6专家互助
发布于2023-3-9 09:33

流水号还是用数据库的自增ID来处理比较好(涉及到并发的问题:多人同时填报可能导致编号重复)

  • Rivan Rivan(提问者) 谢谢您的建议,这个考虑过并发完全不会存在,所以没用自增ID,方便看下上面的语句的问题吗
    2023-03-09 09:39 
  • Z4u3z1 Z4u3z1 回复 Rivan(提问者) 思路: 1、参考https://help.fanruan.com/finereport/doc-view-545.html这个链接生成连续序号 2、根据编号前缀把所有类型的编号最大值都查出来 3、根据所选编号前缀获取2再加1,最后再拼接前缀
    2023-03-09 09:44 
  • Rivan Rivan(提问者) 回复 Z4u3z1 我就是参考的这个,改起来不自增........
    2023-03-09 09:50 
  • Z4u3z1 Z4u3z1 回复 Rivan(提问者) 跟着文档保证第一步正确
    2023-03-09 09:52 
  • 2关注人数
  • 511浏览人数
  • 最后回答于:2023-3-9 10:30
    请选择关闭问题的原因
    确定 取消
    返回顶部