利用sql函数生成不重复的订单号的代码

复制代码 代码如下:

alter function [dbo].[getordernum](

@ebaystockflag varchar(20)//规则字母

)

returns varchar(100)

as

begin

declare @dt char(8)

declare @flag varchar(20)

set @flag=’b’+@ebaystockflag

set @dt=convert(char(8),getdate(),112)

declare @max varchar(100)

select @max=max(ordernumber)

from tb_ebayorder with(xlock,paglock)

where ordernumber like @flag+’%’

set @max=isnull(@max, @flag+@dt+’000′)–查不到结果给个默认值

declare @a varchar(100)

declare @num varchar(10)

declare @ordernum varchar(20)

set @a=convert(varchar,right(@max,len(@max)-10))–截取数字部分

if(left(@a,1)=0)–以0开头

begin

if(substring(@a,2,1)=0)–有两个0

begin

set @num=convert(varchar,substring(@a,3,len(@a-2))+1)

end

else if(substring(@a,3,1)=0 and substring(@a,2,1)=0)–有三个0

begin

set @num=1

end

else begin –只有一个0的情况

set @num=convert(int,substring(@a,2,len(@a))+1)

end

end

else begin –数字大于100的情况

set @num=convert(varchar,@a+1)

end

if(len(@num)=1)–截取后不满三位的补0

begin set @num=’00’+@num end

if(len(@num)=2)

begin set @num=’0’+@num end

set @ordernum=@flag+@dt+@num

return @ordernum

end

调用:在事务中先锁定要操作的表


复制代码 代码如下:

select * from tb_ebayorder with (tablockx)

select * from tb_ebayorderlist with (tablockx)

select * from tb_ebayorderuserinfo with (tablockx)

调用:select dbo.getordernum(@ebaystockflag)

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐