亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQLServer中的行偏移量

SQLServer中的行偏移量

瀟瀟雨雨 2019-06-25 17:05:29
SQLServer中的行偏移量SQLServer中是否有任何方法從給定的偏移量開始獲取結果?例如,在另一種類型的SQL數據庫中,可以這樣做:SELECT * FROM MyTable OFFSET 50 LIMIT 25才能得到51-75的結果。此結構似乎不存在于SQLServer中。在不加載我不關心的所有行的情況下,我如何做到這一點?謝謝!
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

我會避免使用SELECT *..指定實際需要的列,即使這些列可能都是。

SQLServer 2005+

SELECT col1, col2 
FROM (
    SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum    FROM MyTable) AS MyDerivedTableWHERE MyDerivedTable.RowNum BETWEEN @startRow AND @endRow

SQLServer 2000

SQL Server 2000中大結果集的高效尋呼

一種更有效的大結果集尋呼方法


查看完整回答
反對 回復 2019-06-25
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

如果您要按順序處理所有頁面,那么只需記住上一頁上看到的最后一個鍵值,然后使用TOP (25) ... WHERE Key > @last_key ORDER BY Key如果存在適當的索引以允許有效地查找該索引,則可以是最佳的執行方法-或API游標如果他們不這么做的話。

對于選擇任意頁面,SQLServer 2005-2008 R2的最佳解決方案可能是ROW_NUMBERBETWEEN

對于SQLServer 2012+,可以使用增強的命令這一需要的條款。

SELECT  *FROM     MyTable 
ORDER BY OrderingColumn ASC OFFSET  50 ROWS FETCH NEXT 25 ROWS ONLY

盡管這個選項的執行情況還有待觀察。.


查看完整回答
反對 回復 2019-06-25
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

這是一種方法(SQL 2000)

SELECT * FROM(
    SELECT TOP (@pageSize) * FROM
    (
        SELECT TOP (@pageNumber * @pageSize) *
        FROM tableName 
        ORDER BY columnName ASC
    ) AS t1 
    ORDER BY columnName DESC) AS t2 
ORDER BY columnName ASC

這是另一種方法(Sql 2005)

;WITH results AS (
    SELECT 
        rowNo = ROW_NUMBER() OVER( ORDER BY columnName ASC )
        , *
    FROM tableName 
) SELECT * FROM resultsWHERE rowNo between (@pageNumber-1)*@pageSize+1 and @pageNumber*@pageSize


查看完整回答
反對 回復 2019-06-25
  • 3 回答
  • 0 關注
  • 1409 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號