近日,单位的网站新闻系统(Asp+Access)突然出了个小毛病,具体现象如下:在网站首页调用了最新的十篇新闻,但是具体显示出来却是超过了十条,达到十四五条。我查看了一下源代码,SQL语句明明是"Select Top 10 ..."可是选出来的结果不止十条,百思不得其解。
我首先怀疑新闻标题中有非法字符,导致Select语句执行错误,也确实存在一些字符,含有“&”符号,这个符号可能跟Request.QueryString得到的值冲突,我将其改成正常字符,再去执行,现象依然。
我进入数据库(Access),将查询字符串放入数据库中执行,对比查询出来的记录,终于找出了原因。原来是SQL语句中加了“Order by dateandtime desc”子句,查询出来的结果,前八条时 间都不相同,但是后面六条时间却是相同的。因此Top 10子句不知道该如何取舍,于是把那六条都取出来了,就好比,一个班的学生考试成绩排名,除前两名外,有三个人并列第三名,你要取前三名就得取五个人,这 是一个道理,Top 10并没有限死在十条记录,而是取出了最接近十条记录的结果。由此得出结论,Order by子句优先级高于Top XXX子句,后来查询标准T-SQL语法也是如此。看来,有些东西还得细细研究一下。
另一个解决方案,就是在显示的时候在循环里计数,超过十条就跳出循环。之前我用的“While ...Wend”循环,该循环没有跳出语句(除非你用goto,不提倡),所以现在需要修改为“do while ... loop”,跳出语句可以采用“exit do”。








