我需要在網頁上編寫尋呼機的代碼,並且通常使用mysql,它是SELECT with LIMIT 60, 20
的簡單解決方案,這意味着從60位20行開始選擇。mysql限制x,y等價於SQL Server l?
現在我正在使用SQL Server,但應該解決這個問題 - 我知道TOP語法不合適,我也聽說過SQL Server中的ROW_NUMBER()
函數,但是我發現的例子並不是「T足夠清晰 - 請在測試表像‘車’幫助只是
select * from cars limit 20, 10
我需要在網頁上編寫尋呼機的代碼,並且通常使用mysql,它是SELECT with LIMIT 60, 20
的簡單解決方案,這意味着從60位20行開始選擇。mysql限制x,y等價於SQL Server l?
現在我正在使用SQL Server,但應該解決這個問題 - 我知道TOP語法不合適,我也聽說過SQL Server中的ROW_NUMBER()
函數,但是我發現的例子並不是「T足夠清晰 - 請在測試表像‘車’幫助只是
select * from cars limit 20, 10
ROW_NUMBER()不能成爲你的where子句中,所以你必須使用一個單獨的選擇:
select *
from (select row_number() over (ORDER BY cars.CarId) as Row, *
from cars
) temp
where Row between 20 and 29
的[MS SQL Server中偏移行(
是的,這是我一直在尋找最後一個小時 - 謝謝兄弟。真的很實際。 –
SQL Server 2005中引入了新的ROW_NUMBER()函數,使得分頁任務更加容易。爲了實現分頁像在前面的例子,從客戶表中獲得第三頁,其中國家列是「西班牙有10條記錄每頁和公司名稱的存儲過程下令將這個樣子:
CREATE PROCEDURE Paging_Customers
(
@SelectedPage int,
@PageSize int
)
AS
BEGIN
WITH CTE_Customers(PageNumber, ContactTitle, ContactName, CompanyName, Phone, Country)
AS
(
SELECT CEILING((ROW_NUMBER() OVER
(ORDER BY CompanyName ASC
AS PageNumber, ContactTitle, ContactName, CompanyName, Phone, Country
FROM Customers
)
SELECT *
FROM CTE_Customers WHERE PageNumber = @SelectedPage
END
然後,我們調用這個過程(第三頁,每頁十行)這個簡單的一行:
EXEC Paging_Customers 3, 10
謝謝,但我需要一個沒有PROCEDURE的簡單解決方案,就像我在汽車表格示例中提出的那樣,因爲在不同的流程中,我將設置不同的值和where子句等。 –
與MySQL不同,SQL Server不支持LIMIT子句,對於分頁,您也必須使用ROW_NUMBER,臨時表或三個嵌套查詢。並且這些都不是簡單的,因爲mysql中的限制語句 – sudheshna
@sudheshna - 你的程序中沒有使用@PageSize。從大型結果集中取出一個小頁面時,執行效果如何? –
-- Sample data
;with cars(Name) as
(
select 'SAAB' union all
select 'Volvo' union all
select 'Opel' union all
select 'Ford'
)
-- Query using row_number
select *
from
(
select *,
row_number() over(order by Name) as rn
from cars
) as C
where C.rn between 2 and 3
結果:
Name rn
---- --
Opel 2
SAAB 3
試試這個:
SELECT * FROM
(SELECT *, ROW_NUMBER() OVER (ORDER BY col1) AS row FROM sys.databases) table1
WHERE row > 20 and row <= 30
提供了更多的答案here on SO。
可能重複http://stackoverflow.com/questions/187998/row-offset-in-ms-sql-server) –
參見http://stackoverflow.com/questions/216673/emulate-mysql-limit-clause-in-microsoft-sql-server-2000 –