SQL Server l的mysql限制x,y等效值?
我需要为网页上的寻呼机编写代码,通常使用mysql进行选择是一个简单的解决方案,限制为60,20,这意味着从60位置选择20行 现在我正在使用SQL Server,但应该解决这个问题-我知道顶级语法不合适,我也听说过SQL Server中的行数函数,但我发现的示例不够清楚-请在测试表上提供帮助,就像汽车一样,简单地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
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