1. 程式人生 > >在SQL-Server中,取出第n條到第m條記錄簡單分析

在SQL-Server中,取出第n條到第m條記錄簡單分析

在SQL-Server中,取出第n條到第m條記錄可以這樣寫 

例如: 
從publish   表中取出第   n   條到第   m   條的記錄: 
SELECT   TOP   m-n+1   * 
FROM   publish 
WHERE   (id   NOT   IN 
                    (SELECT   TOP   n-1   id 
                  FROM   publish order by id))  order by id

id   為publish   表的關鍵字 

以下幾種是我在別人的部落格中看到的前兩種看了下,做下總結。

  (1) --從Table 表中取出第 m 條到第 n 條的記錄:(Not In 版本)

SELECTTOP n-m+1*FROMTableWHERE (id NOTIN (SELECTTOP m-1 id FROMTable ))  

  這種方法和我上邊寫的一樣,主要的思想就是,先選出表中所有的項,m-n+1是表中有幾條,然後top n-m+1 就可以找出需要的條數。關鍵中中間的

(SELECTTOP m-1 id FROMTable ) 這句話也是先選出表中所有項,再選出 top m-1就是,表的前m-1條了。最加上WHERE (id NOTIN (SELECTTOP m-1 id 

FROMTable ))最後講所有選出的記錄去掉top m-1條,在取出top n-m+1 就是答案了。

  (2)--從TABLE表中取出第m到n條記錄 (Exists版本)SELECTTOP n-m+1*FROMTABLEAS a WHERENotExists
  (
Select*From (SelectTop m-1*FromTABLEorderby id) b Where b.id=a.id ) 

Orderby id

  這種方法和第一種方法思想差不多,都是先選出所有的資料,排除前top m-1個數據,最後取出top n-m+1 。這裡需要注意的是如果你要按照某種順序排序的話,則就需要在如上得兩處order by id。還有這裡的Where

 b.id=a.id 去掉就不行了,不知道為什麼?

'@P0'附近有語法錯誤

原因:

在Java中對資料庫查詢時經常使用“Select Top ? * From 表名 Where 列名 = ?”的SQL語句,此時的問號是PreparedStatement預編譯物件的引數佔位符,需要使用setXX()系列方法對其賦值後再執行。

但是,Top後面是不允許使用問號佔位符的,此處的錯誤就是由此引起的。

解決方案:

應將Top後面的問號改為具體數字,或者使用“+”連線變數與字串。

上句SQL可修改為以下寫法:

"Select Top " + num + " * From 表名 Where 列名 = ?"

上述num為int型變數。除了Top後的問號以外,其他引數佔位符不受此約束。

以上~~