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