ALTERfunction[dbo].[GetOrderNum](
@ebaystockflagvarchar(20)//规则字母
)
returnsvarchar(100)
AS
BEGIN
declare@dtCHAR(8)
declare@flagvarchar(20)
set@flag='B'+@ebaystockflag
set@dt=CONVERT(CHAR(8),GETDATE(),112)
declare@maxvarchar(100)
SELECT@max=MAX(OrderNumber)
FROMtb_EbayOrderWITH(XLOCK,PAGLOCK)
WHEREOrderNumberlike@flag+'%'
set@max=isnull(@max,@flag+@dt+'000')--查不到结果给个默认值
declare@avarchar(100)
declare@numvarchar(10)
declare@ordernumvarchar(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
elseif(SUBSTRING(@a,3,1)=0andSUBSTRING(@a,2,1)=0)--有三个0
begin
set@num=1
end
elsebegin--只有一个0的情况
set@num=Convert(int,SUBSTRING(@a,2,LEN(@a))+1)
end
end
elsebegin--数字大于100的情况
set@num=Convert(varchar,@a+1)
end
if(LEN(@num)=1)--截取后不满三位的补0
beginset@num='00'+@numend
if(LEN(@num)=2)
beginset@num='0'+@numend
set@ordernum=@flag+@dt+@num
return@ordernum
END
调用:在事务中先锁定要操作的表
知识星球
代码如下:
SELECT*FROMtb_EbayOrderWITH(TABLOCKX)
SELECT*FROMtb_EbayOrderListWITH(TABLOCKX)
SELECT*FROMtb_EbayOrderUserInfoWITH(TABLOCKX)
调用:selectdbo.GetOrderNum(@ebaystockflag)
|