概述
--修改时间:11.23
--exec [zkmc_public_GetQuoReceiveDocSn] 'sp'
--创建人:lj
--标签拆分的sn
--修改时间:11.23
alter proc [dbo].[zkmc_public_GetQuoReceiveDocSn]
(@headStr nvarchar(10))
as
BEGIN
declare @date datetime
set @date = getdate()
declare @oid2 nvarchar(50)
declare @oid nvarchar(50)
declare @month nvarchar(2)
declare @year nvarchar(4)
declare @ym nvarchar(6)
declare @length int
set @month=month(@date)
if len(@month)=1
set @month='0'+@month --使月为两位长
declare @day nvarchar(2)
set @day = day(@date)
if len(@day) =1
set @day = '0' + @day --日
set @year=right(convert(nvarchar,year(@date)),2)
set @ym=@year+@month +@day --组成年月字符
print @ym
set @length =len(@headStr)
--格式Q200908001
if exists(select * from t_ReceiveDocT where sn like '%' + @headStr+ @ym +'%' )
begin
declare @strsql nvarchar(max)
set @strsql=' select top 1 @oid3=sn from t_ReceiveDocT
where sn like ''' + @headStr+ @ym +'%'' order by id desc '
print @strsql
exec sp_executesql @strsql,N'@oid3 nvarchar(50) output',@oid2 output
print @oid2
--获取最后一条的单据编号,一定要有id,并且自动生成的,倒排序
end
else
begin
set @oid2=@headStr+@ym+'000' --没有记录是默认为今天
end
print 'oid: '+ @oid2
--订单不是本月的,重新开始一个新的订单流水号
if convert(nvarchar,substring(@oid2,5,2)) <>@month
begin
--用本月的年月号开始
set @oid2=@headStr+@ym+'000'
print @oid2
end
declare @str nvarchar(50) --临时单号
set @str=convert(nvarchar,(convert(int,substring(@oid2,9,3))+1)) --订单号加一
print 'dfds' + @str
while (3-len(@str)>0)
begin
set @str='0'+@str
end
set @oid2=@headStr+@ym+@str
--print '---'+@oid2
--如果该订单好已经存在,则重新获取
while exists(select * from t_ReceiveDocT where Sn=@oid2)
begin
set @str=convert(nvarchar,(convert(int,substring(@oid2,9,3))+1)) --订单号加一
while (3-len(@str)>0)
begin
set @str='0'+@str
end
set @oid2=@headStr+@ym+@str
-- print @oid2
end
set @oid=convert(nvarchar,@oid2)
--print 'Q'+convert(nvarchar,year(getdate()))+convert(nvarchar,month(getdate()))+@str
select @oid
END
最后
以上就是直率诺言为你收集整理的sql 获取最大的流水号的全部内容,希望文章能够帮你解决sql 获取最大的流水号所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复