日期:2014-05-16  浏览次数:20869 次

请教一个ASP里面自动编号问题
表sample,编号组成是前面两位字母+后面9位数字组成,如:GZ201303001,现在每次插入新纪录都会按照之前的编号自动+1,但不能依靠ID来查找之前编号的最大值,所以不能用TOP 1,请教如何写查询语句?我之前写的SQL:select max(fileno) as fileno from(select top 100 percent * from sample where fileno like '%"&str&"%' order by id desc),在查询分析器里面可以执行,但在ASP里面会报错……
asp sql

------解决方案--------------------
为什么不分开两个字段保存呢……
字段1:GZ
字段2:201303001

而且201303011作为int,查找应该比现在的字符型快吧……
------解决方案--------------------
如果前面两位字母不是固定的GZ(是广东省的什么政府项目?),想忽略前两位字母,只比较后面的9位数字,就应该用SQL的substring函数把fileno从第三个字符截到末尾取出数字部分构成新记录集。当然,前两个字母也需要放在这个记录集的另一个字段里,以便在逆向排序之后再把结果编号用数字和字母两部分连结在一起。
------解决方案--------------------
select top 1 fileno,'GZ'+convert(varchar,convert(int,substring(fileno,3,9))+1) newfileno from  sample where fileno like 'GZ%' order by substring(fileno,3,9) desc
------解决方案--------------------
引用:
引用:为什么不分开两个字段保存呢……
字段1:GZ
字段2:201303001

而且201303011作为int,查找应该比现在的字符型快吧……

这个不是重点啊,即使分开了也要面对查询最大值这个难题啊……因为我每一条记录都需要通过审核后才会生成编号的,所以先审核ID靠前的记录完全是有可能的,这样就不能用TOP 1来判断了,求指教……


解决了就是好事,下面只是建议。

和前面兄弟说的一样,“数据库的设计”
GZ2013001  id nvarchar
2013001    id int
这两种字段的最大值查询能一样么……
使用int的话,select top 1 * from 表 order by id desc
很简单就取得最大值
如果ID使用字符的话,而且也许以后你还会因为别的问题而烦恼
比如哪天突然要求搜索一下GZ的所有记录,或者SH、BJ的所有记录
别给自己添加麻烦……
------解决方案--------------------
区域+区域ID可以做成一个“唯一键”,约束一下

PS
楼主先别结贴
不知道区域+区域ID能不能做成自增+1的形式
求大神出现!