SQL Server l的mysql限制x,y等效值?

SQL Server l的mysql限制x,y等效值?,sql,sql-server,Sql,Sql Server,我需要为网页上的寻呼机编写代码,通常使用mysql进行选择是一个简单的解决方案,限制为60,20,这意味着从60位置选择20行 现在我正在使用SQL Server,但应该解决这个问题-我知道顶级语法不合适,我也听说过SQL Server中的行数函数,但我发现的示例不够清楚-请在测试表上提供帮助,就像汽车一样,简单地 select * from cars limit 20, 10 SQLServer2005引入了新的行数函数,使分页任务更容易。要实现像前面示例中那样的分页,请从Customers

我需要为网页上的寻呼机编写代码,通常使用mysql进行选择是一个简单的解决方案,限制为60,20,这意味着从60位置选择20行

现在我正在使用SQL Server,但应该解决这个问题-我知道顶级语法不合适,我也听说过SQL Server中的行数函数,但我发现的示例不够清楚-请在测试表上提供帮助,就像汽车一样,简单地

select * from cars limit 20, 10

SQLServer2005引入了新的行数函数,使分页任务更容易。要实现像前面示例中那样的分页,请从Customers表中获取第三页,其中Country列为“西班牙”,每页有10条记录,由CompanyName存储过程排序,如下所示:

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
结果:

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

提供了更多答案。

行号不能在where子句中,因此您必须使用单独的select:

select *
from (select row_number() over (ORDER BY cars.CarId) as Row, *
    from cars
    ) temp
where Row between 20 and 29

See的可能重复也谢谢,但我需要一个没有过程的最简单的解决方案,正如我在cars表示例中所问的那样,因为对于不同的流,我将设置不同的值和where子句等。与MySQL不同,SQL Server不支持LIMIT子句,同样对于分页,您必须使用任意一行\号,具有三个嵌套查询的临时表或。所有这些都不像中的limit语句那么简单mysql@sudheshna-您的过程中没有使用@PageSize。当从一个大的结果集中获取一个小页面时,它的性能如何?是的,这就是我在过去一个小时里一直在搜索的内容-谢谢你,老兄。真的很实用。
select *
from (select row_number() over (ORDER BY cars.CarId) as Row, *
    from cars
    ) temp
where Row between 20 and 29