SQL Server等效于MySQL Limit

时间:2012-02-13 13:16:20

标签: mysql sql sql-server-2008

  

可能重复:
  Equivalent of LIMIT and OFFSET for SQL Server?

这是一个mysql查询

SELECT email FROM emailTable LIMIT 9,20 WHERE id=3

如何在SQL Server(2008)中编写它?

我必须写

SELECT TOP 9,20 email FROM emailTable WHERE id=3

? 谢谢你的帮助

3 个答案:

答案 0 :(得分:6)

试试这个:

SELECT * 
FROM 
( 
      SELECT *, 
        ROW_NUMBER() OVER (ORDER BY email) as rowNum 
      FROM tableName
) sub 
WHERE rowNum > 9 
  AND rowNum <= 9 + 20 
  AND id = 3

DEMO

答案 1 :(得分:2)

您可以使用ROW_NUMBER()来获得相同的结果。

e.g。获取第1行到第10行:

;WITH results AS
(    
    SELECT ROW_NUMBER() OVER (ORDER BY YourColumn ASC) AS RowNo,
        email
    FROM emailTable
)

SELECT * 
FROM results
WHERE RowNo BETWEEN 1 AND 10

修改 浓缩为1声明:

SELECT * 
FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY YourColumn ASC) AS RowNo,
        email
    FROM emailTable
) x
WHERE x.RowNo BETWEEN 1 AND 10

答案 2 :(得分:1)

在sql server中限制偏移量:

SELECT email FROM emailTable WHERE id=3
OFFSET 8 ROWS
FETCH NEXT 12 ROWS ONLY;

// offset - no。跳过的行

// next - 要求不。下一行

更新:这是有效的,但是sql server 2012以后