求一个存储过程的写法:自动生成订单号
订单号很简单,就是系统的当前日期(200652)+00n
前提是先找到表中当前日期最大的一条记录,然后再加一作为新记录的订单号,
问 题,虽然很简单,但是我想了很久都没搞出来,真是郁闷,大家最好帮我写点现存的代码,谢了
问题点数:20、回复次数:5Top
1 楼flyingdream123()回复于 2006-05-02 14:48:42 得分 0
下面的是我现在写的,对sql语句不是很熟悉,写得很烦所,而且下面的执行有错误,当一个订单里有字母时,就出现错误,查询后面加的日期条件好像没有,这是为什么。
if exists(select name from sysObjects
where name='OrderID' and type='P')
drop proc OrderID
go
create proc OrderID
@id varchar(50) output
as
declare @dataStr varchar(50),@IdMax varchar(50),@n int
set @dataStr=DATENAME(yy,GETDATE())
set @dataStr=@dataStr+datename(m,getdate())
set @dataStr=@dataStr+datename(d,getdate())
if exists(select max(OrderID) from OperationMain where OrderID=@dataStr)
begin
select @IdMax=max(OrderID) from OperationMain where OrderID=@dataStr
set @dataStr=@dataStr+cast(cast(RIGHT(@IdMax,3) as int)+1 as varchar(50))
set @id=@dataStr
end
else
begin
set @id=@dataStr+'1'
end
return @idTop
2 楼flyingdream123()回复于 2006-05-02 16:10:50 得分 0
晕,平时这里人不是很多的吗?怎么今天这么冷静啊Top
3 楼flyingdream123()回复于 2006-05-02 18:44:31 得分 0
很难吗?Top
4 楼zhaojestin()回复于 2006-05-02 20:54:14 得分 20
create function AddNid(@date datetime)
returns varchar(12)
begin
declare @DT varchar(8)
declare @nid varchar(12)
declare @nidnew varchar(3)
declare @result varchar(12)
set @nid=null
set @DT=convert(varchar(8),@date,112)
select @nid=max(Nid) from News
if (@nid is null)
begin
set @result=ltrim(rtrim(@DT))+'000'
return @result
end
else
begin
set @nidnew=right(ltrim(rtrim(cast((1000+cast(right(@nid,3) as int)+1) as varchar(4)))),3)
set @result=ltrim(rtrim(@DT))+@nidnew
end
return @result
end
这是我自己写着用的,跟你的要求一模一样,只差后面边个N,自己连上吧Top
5 楼lpy123456(三流鬼)回复于 2006-08-07 16:16:28 得分 0
markTop




