问题:在实际业务处理中有些单号需要自动增长,但又不能用自增列代替
eg: P031106001 -- 第一位P表示采购单,031106表示日期,后三位是流水号。
/* 1:创建测试用的表结构 */
create table tablename(pono char(10),b int)
go
/* 2:创建一个得到当前日期的视图,为下面的自字义函数作准备 */
create view vGetdate
as
select getdate() as today
go
/* 3:用自定义函数来得到单号(因自定函数内不能用getdate()来得到当前日期,要用到上面的视图) */
create function getDH()
returns char(10)
As
begin
declare @dh1 char(10),@dh2 char(10)
select @dh1 = max(pono) from tableName
Set @dh1 = IsNull(@dh1,'P000000000')
select @dh2 = Left(@dh1,1) + right(convert(varchar(8),today,112),6) + '001' from vGetdate
if @dh1 >= @dh2
begin
set @dh2 = left(@dh1,7) + right('000'+ cast(cast(right(@dh1,3) as int)+1 as varchar),3)
end

本文介绍了如何在数据库中处理业务单号自动增长的问题,特别是在单号格式有特定要求且不能使用自增列的情况下。通过创建视图、自定义函数以及设置字段默认值,实现了在插入记录时自动生成如‘P031106001’格式的单号,其中包含了业务类型标识、日期和流水号。文中还提供了测试步骤和结果,展示了解决方案的有效性。
最低0.47元/天 解锁文章
1133

被折叠的 条评论
为什么被折叠?



