关于SQL编号的问题
在SQL存储过程中:
CREATE PROCEDURE reserveorderno @a varchar(2) AS
declare @y as varchar(2),@m as varchar(2),@l as varchar(4),@o as varchar(11)
set @y=right(cast(year(getdate()) as char(4)),2)
set @m=right('0'+cast(month(getdate()) as varchar(2)),2)
if (select count(*) from reserve where reserveno like @a+@y+'%' and len(reserveno)=11)>0
select @l= right('000'+cast((right(max(reserveno),4)+1) as varchar(4)),4) from reserve where reserveno like @a+@y+'%' and len(reserveno)=11
else
select @l='0001'
set @o=@a+@y+'S'+@m+@l
select @o as orderno
GO
在页面调用语句:
<%Response.Charset = "GB2312" %>
<%
area=request("cust_area")
connstrdan="Driver={SQL Server};server=symserver;database=dan2003;uid=lxy;pwd=82910555623"
Set conndan = Server.CreateObject("ADODB.Connection")
conndan.Open connstrdan
Set rs_goods= Server.CreateObject("ADODB.RecordSet")
sql="exec quoteorderno @a="&area
Rs_goods.open sql,conndan
response.Write rs_goods("orderno")
%>
出现问题:
1、老是会出现编号不会自动更新的现象,就是会出现提示编号已存在的对话框
2、如果有几位一起调用的话,编号就会是一样的,只有一个能保存,其它保存就会出错
请高手指点,谢谢!
[解决办法]
你那个编号的生成规律不够严密。
[解决办法]
declare @y as varchar(2),@m as varchar(2),@l as varchar(4),@o as varchar(11)
set @y=right(cast(year(getdate()) as char(4)),2)
set @m=right('0'+cast(month(getdate()) as varchar(2)),2)
if (select count(*) from reserve where reserveno like @a+@y+'%' and len(reserveno)=11)>0
select @l= right('000'+cast((right(max(reserveno),4)+1) as varchar(4)),4) from reserve where reserveno like @a+@y+'%' and len(reserveno)=11
else
select @l='0001'
set @o=@a+@y+'S'+@m+@l
这段编码生成代码没有作相关的判断,逻辑不够严谨
[解决办法]
楼主这个存储过程只是select编号,没有update和insert语句?
如要保证编号延续且不重复
1、新增订单时只是max(reserveno)+1即可
2、保存术单时再取一遍,且同时update即可
[解决办法]
你生成编号判断条件有问题
[解决办法]
在表中添加唯一索引
