關於ACCESS中TOP 功能的一個問題

我一直以爲ACCESS的SQL語句與SQL Server差不多,當時也使用 Select top n在ACCESS測試過,都是成功的,但昨天突然發現ACCESS中有個問題:
  如果在查詢TOP語句的後面使用Order by,而且Order by字段中有重複值的話,那麼這個TOP很可能會失效,
會返回所有記錄
比如:
 Select top 5  *  from News order by CreateDate

如果CreateDate中有重複值,那麼很有可能會顯示出所有的記錄來,此TOP功能會失效的
但如果CreateDate中無重複值,那麼TOP功能還是有效的

因此,在ACCESS中使用TOP功能要注意一下order by的字段是否會有重複值,如果象CreateDate是"年-月-日 時:分:秒"的,那基本上問題不大的。
但爲了保險起見,我們也可以採用“加入主鍵”的方式:

 Select top 5 * from News order by CreateDate desc,id desc


用主鍵作“不可能重複”的保障就可以防止此問題出現了!!

希望這對某些朋友有用!!

在網上找到一個相關的解釋:
JET SQL不是 T-SQL語句。
jet sql 會返回重複值,也就是說,一個表中如果 ORDER BY 的字段都是 0 ,一共有100條記錄,即使你用SELECT TOP 1 來返回記錄,也同樣返回100條記錄,因爲 JET DB 無從在這100條記錄裏面判斷先後次序,只能返回100條。要解決此問題可以在後面加入一個主鍵字段

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章