带分页vb.net的Sql SELECT语句

带分页vb.net的Sql SELECT语句,sql,vb.net,select,paging,Sql,Vb.net,Select,Paging,我已经研究了许多其他类似的问题,但我的发言无法做到这一点。这是当前有效的SELECT语句,我需要添加分页 "SELECT TOP 15 * FROM tblEvents WHERE (dbo.fnEventSearchDistance(@CityLat, " & _ "@CityLong, latitude, longitude) <= @Radius AND (StartDate >= GETDATE())) " 我需要一个SELECT语句来重写

我已经研究了许多其他类似的问题,但我的发言无法做到这一点。这是当前有效的SELECT语句,我需要添加分页

      "SELECT TOP 15 * FROM  tblEvents WHERE (dbo.fnEventSearchDistance(@CityLat, " & _
      "@CityLong, latitude, longitude) <= @Radius AND (StartDate >= GETDATE())) "
我需要一个SELECT语句来重写第一个SELECT语句以合并分页,在这里我可以添加pageSize和pageNum参数

;With ranked AS
(
   SELECT ROW_NUMBER() OVER(ORDER BY StartDate) AS RowNum,  * 
   FROM tblEvents
)
SELECT * FROM Ranked
WHERE RowNum BETWEEN ((@PageNum - 1) * @PageSize + 1)
    AND (@PageNum * @PageSize)
    ORDER BY StartDate
请尝试以下方法:

;With ranked AS
(
   SELECT ROW_NUMBER() OVER(ORDER BY StartDate) AS RowNum,  * 
   FROM tblEvents
)
SELECT * FROM Ranked
WHERE RowNum BETWEEN ((@PageNum - 1) * @PageSize + 1)
    AND (@PageNum * @PageSize)
    ORDER BY StartDate

假设SQL Server 2008及以前版本,您应该尝试以下操作:

"SELECT col1, col2 FROM (SELECT ROW_NUMBER() OVER(ORDER BY StartDate) AS RowNum, * FROM tblEvents) AS E " & _
"WHERE RowNum BETWEEN ((@PageNum - 1) * @PageSize + 1) " & _
"AND (@PageNum * @PageSize) " & _
"ORDER BY StartDate"
请注意,我将
col1、col2
放在select上,您应该将需要的列放在那里。 对于SQL Server 2012,这非常简单:

"SELECT * FROM tblEvents ORDER BY StartDate " & _ 
"OFFSET (@PageNum - 1) * @PageSize ROWS FETCH NEXT @PageNum ROWS ONLY"

假设SQL Server 2008及以前版本,您应该尝试以下操作:

"SELECT col1, col2 FROM (SELECT ROW_NUMBER() OVER(ORDER BY StartDate) AS RowNum, * FROM tblEvents) AS E " & _
"WHERE RowNum BETWEEN ((@PageNum - 1) * @PageSize + 1) " & _
"AND (@PageNum * @PageSize) " & _
"ORDER BY StartDate"
请注意,我将
col1、col2
放在select上,您应该将需要的列放在那里。 对于SQL Server 2012,这非常简单:

"SELECT * FROM tblEvents ORDER BY StartDate " & _ 
"OFFSET (@PageNum - 1) * @PageSize ROWS FETCH NEXT @PageNum ROWS ONLY"
不能在
WHERE
子句中引用,使用can帮助分页

WITH Paging AS
(
   SELECT ROW_NUMBER() OVER (ORDER BY StartDate) AS RowNum
    , *
   FROM tblEvents
)
SELECT *
FROM Paging AS p
WHERE p.RowNum BETWEEN ((@PageNum - 1) * @PageSize + 1)
   AND (@PageNum * @PageSize)
ORDER BY p.StartDate ASC;
从SQL 2012开始,您将有权在
ORDER BY
中访问,以帮助使分页更容易、更高效。

您不能在
WHERE
子句中引用,使用can帮助分页

WITH Paging AS
(
   SELECT ROW_NUMBER() OVER (ORDER BY StartDate) AS RowNum
    , *
   FROM tblEvents
)
SELECT *
FROM Paging AS p
WHERE p.RowNum BETWEEN ((@PageNum - 1) * @PageSize + 1)
   AND (@PageNum * @PageSize)
ORDER BY p.StartDate ASC;

从SQL 2012开始,您将有权在您的
ORDER BY
中访问,以帮助使分页更容易、更高效。

要重写第一个SELECT语句以添加分页,什么不起作用?除了在
AS RowNum
后面缺少逗号之外,我还得到了一个错误“无效列名'RowNum'。”来重写第一个SELECT语句以添加分页什么不起作用?除了作为RowNum的
后面缺少逗号之外,我还得到了错误“无效列名'RowNum.”伟大的分页查询。。但我还需要知道查询的总记录计数..如何在不进行两次查询的情况下做到这一点?伟大的分页查询。。但我还需要知道查询的总记录计数..如何在不进行两次查询的情况下做到这一点?