舊版 Microsoft SQL Server 版本中 LIMIT 子句的解決方法
Microsoft SQL Server 2000 缺少 ROW_NUMBER()
函數,因此很難複製 MySQL 等資料庫中的 LIMIT
子句功能。 有幾種方法,每種方法都有缺點。
使用 TOP
的巢狀查詢是一種常見的方法。 但是,當所需範圍超過總行數時,此方法會失敗,導致分頁錯誤,尤其是在最終「頁面」上。
另一種技術依賴表中的唯一欄位。 這本質上是有限的,因為它取決於合適的唯一標識符的存在。
對於 SQL Server 2005 及更高版本,EXCEPT
語句提供了更強大的解決方案。這涉及將巢狀查詢與 EXCEPT
運算子結合以過濾掉初始行,從而有效地獲得所需的子集。
說明範例:檢索第 50 行到 75 行:
<code class="language-sql">SELECT * FROM ( SELECT TOP 75 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS foo EXCEPT SELECT * FROM ( SELECT TOP 50 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS bar;</code>
總而言之,雖然在 SQL Server 2000 中存在模仿 LIMIT
的變通方法,但沒有一個可以在不妥協或不依賴其他功能的情況下完美複製其行為。 對於支援 ROW_NUMBER()
的版本(SQL Server 2005 及更高版本),建議使用函數,也是最有效的方法。
以上是如何在不使用 ROW_NUMBER() 的情況下模擬 Microsoft SQL Server 2000 中的 LIMIT 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!