在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
(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
'@P0'附近有語法錯誤
原因:
在Java中對資料庫查詢時經常使用“Select Top ? * From 表名 Where 列名 = ?”的SQL語句,此時的問號是PreparedStatement預編譯物件的引數佔位符,需要使用setXX()系列方法對其賦值後再執行。
但是,Top後面是不允許使用問號佔位符的,此處的錯誤就是由此引起的。
解決方案:
應將Top後面的問號改為具體數字,或者使用“+”連線變數與字串。
上句SQL可修改為以下寫法:
"Select Top " + num + " * From 表名 Where 列名 = ?"
上述num為int型變數。除了Top後的問號以外,其他引數佔位符不受此約束。
以上~~