2011-07-05 80 views
3

我需要在網頁上編寫尋呼機的代碼,並且通常使用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 
+0

可能重複http://stackoverflow.com/questions/187998/row-offset-in-ms-sql-server) –

+0

參見http://stackoverflow.com/questions/216673/emulate-mysql-limit-clause-in-microsoft-sql-server-2000 –

回答

3

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中偏移行(
+0

是的,這是我一直在尋找最後一個小時 - 謝謝兄弟。真的很實際。 –

1

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 
+0

謝謝,但我需要一個沒有PROCEDURE的簡單解決方案,就像我在汽車表格示例中提出的那樣,因爲在不同的流程中,我將設置不同的值和where子句等。 –

+0

與MySQL不同,SQL Server不支持LIMIT子句,對於分頁,您也必須使用ROW_NUMBER,臨時表或三個嵌套查詢。並且這些都不是簡單的,因爲mysql中的限制語句 – sudheshna

+0

@sudheshna - 你的程序中沒有使用@PageSize。從大型結果集中取出一個小頁面時,執行效果如何? –

0
-- 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 
0

試試這個:

SELECT * FROM 
    (SELECT *, ROW_NUMBER() OVER (ORDER BY col1) AS row FROM sys.databases) table1 
WHERE row > 20 and row <= 30 

提供了更多的答案here on SO

相關問題