首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC++ ADO/SQL 讀取資料表第 N 筆記錄:ROW_NUMBER() 分頁寫法

     編輯:程式設計綜合問答

需求

不想用 WHERE 條件,直接按順序取第 N 筆。

SQL Server 2005+ 標準寫法

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY id DESC) AS rowid, name
    FROM test
) t
WHERE t.rowid = 10;  -- 取第 10 筆

解析

  • ROW_NUMBER() OVER (ORDER BY ...) 為每列生成遞增序號。
  • 外層查詢依序號過濾。
  • ORDER BY id DESC 定義「第 N 筆」的排序規則(可換成時間、名稱等)。

VC++ ADO 執行

_bstr_t sql = "SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id DESC) AS rowid, name FROM test) t WHERE t.rowid = 10";
_RecordsetPtr rs = m_pConnection->Execute(sql, NULL, adCmdText);
if (!rs->adoEOF) {
    _variant_t vName = rs->GetCollect("name");
    // 使用 vName
}

舊版 SQL Server 2000 替代方案

SELECT TOP 1 name FROM (
    SELECT TOP 10 name FROM test ORDER BY id DESC
) t ORDER BY id ASC; -- 取第 10 筆(相對低效)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved