订单编号自动编写

本文介绍两种使用T-SQL实现订单表自动编号的方法。方法一通过自定义函数获取当前日期并结合订单表中最大序号进行编号;方法二利用触发器在插入新记录时自动生成符合要求的订单编号。

现有一订单表SO_Table,其中订单号字段:RefNO varchar(10), 现在需要实现自动编号,格式为YYYYMMXXXX,其中XXXX为序号。

如:2010040001  2010040002 2010049999,但每次前六位日期变化时要重新编号。采用T-sql实现订单自动编号的思路。

 

create table SO_Table
(
RefNo varchar(10) Not NULL
,RefName varchar(100)
)

 

方法一:

[code=SQL]

alter function f_getRefNo()
returns varchar(10)
as
begin
    
declare @RefNo varchar(10)
    
select @RefNo=Convert(varchar(6),GETDATE(),112)+right(10001+cast(isnull(right(MAX(RefNo),4),0) as int),4)
    
from SO_Table with(xlock)
    
where RefNo like Convert(varchar(6),GETDATE(),112)+'%'
    
return @RefNo
end

create table SO_Table
(
RefNo
varchar(10) Not NULL primary key default dbo.f_getRefNo()
,RefName
varchar(100)
)
insert into SO_Table(RefName)values('aa')
insert into SO_Table(RefName)values('bb')
insert into SO_Table(RefName)values('cc')
delete from SO_Table where RefName='cc'
insert into SO_Table(RefName)values('cc')


--修改系统时间
insert into SO_Table(RefName)values('aa')
insert into SO_Table(RefName)values('bb')
insert into SO_Table(RefName)values('cc')
select * from SO_Table
---------
RefNo    RefName
2011010001    aa
2011010002    bb
2011010003    cc
2011020001    aa
2011020002    bb
2011020003    cc

[/code]

 

方法二:

[code=sql]

--建表
if object_id('SO_Table') IS NOT NULL
   
drop table SO_Table create table SO_Table
(
RefNo
varchar(10) Not NULL
,RefName
varchar(100)
)
--插入一条记录
insert into SO_Table
select '2011010001','wch'

--创建代替insert操作的触发器
if object_id('TRG_InsertSO_Table') IS NOT NULL
   
drop trigger TRG_InsertSO_Table
create trigger TRG_InsertSO_Table
on dbo.SO_Table
instead
of insert
as
insert into SO_Table(RefNo,RefName)
select
(
select convert(varchar(6),getdate(),112)+replace(str((ISNULL(max(cast(substring(RefNo,7,4) as int)),0))+1,4),' ','0')
from SO_Table
where substring(RefNo,1,6)=convert(varchar(6),getdate(),112)) as RefNo
,RefName
from inserted

--测试数据
insert into SO_Table(RefName)
select 'alex'

select * from SO_Table

 

[/code]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值