CREATEprocedure up_GetBeautifulOrderNumber(@orderNumberchar(12) out) as begin declare@numberchar(11)--编号的后11位 declare@maxDatedecimal--从数据库表中当前最大的编号中取出的日期 declare@currentDatedecimal--当前日期 declare@currentNumberchar(12) --数据库表中当前最大的编号 declare@daychar(2) --当前日期,如果是一位数,需要将其转换为两位数 set@day=(selectcaselen(datename(d,getdate())) when1then'0'+cast(datename(d,getdate()) aschar(1)) when2thencast(datename(d,getdate()) aschar(2)) end) set@currentDate=cast((datename(yyyy,getdate())+datename(mm,getdate())+@day) asdecimal) ifnotexists(selecttop1 OrderID from Orders orderby OrderID desc) begin set@number=cast((@currentDate*1000) aschar(11)) end else begin set@currentNumber=(selecttop1 OrderID from Orders orderby OrderID desc) set@maxDate=cast(substring(@currentNumber, 2,8) asdecimal) if@maxDate<@currentDate begin set@number=cast(@currentDate*1000aschar(11)) end elseif@maxDate=@currentDate begin set@number=cast((cast(substring(@currentNumber,2,12) asdecimal)+1) aschar(11)) end else begin print@maxDate declare@errMessagevarchar(100) set@errMessage=cast(@maxDateaschar(10))+'错误,数据库表中纪录的最大日期有错误,请与数据库管理员联系。' raiserror(@errMessage, 16, 1) end end set@orderNumber='B'+@number end