[英]SELECT SQL Statement not working as expected in VB.net Console application
[英]Sql SELECT statement with paging vb.net
我已經看過許多其他類似的問題,但我的陳述無法解決這個問題。 這是當前有效的SELECT語句,我需要添加分頁。
"SELECT TOP 15 * FROM tblEvents WHERE (dbo.fnEventSearchDistance(@CityLat, " & _
"@CityLong, latitude, longitude) <= @Radius AND (StartDate >= GETDATE())) "
這是我所能獲得的最接近的。
"SELECT ROW_NUMBER() OVER(ORDER BY StartDate) AS RowNum, * FROM tblEvents " & _
"WHERE RowNum BETWEEN ((@PageNum - 1) * @PageSize + 1) " & _
"AND (@PageNum * @PageSize) " & _
"ORDER BY StartDate"
comm2.Parameters.AddWithValue("@PageSize", 25)
comm2.Parameters.AddWithValue("@PageNum", 2)
我需要一個SELECT語句來重寫第一個SELECT語句以合並分頁,在這里可以添加pageSize和pageNum參數
假設使用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"
CREATE PROCEDURE [dbo].[usp_PageResults_NAI]
(
@startRowIndex int,
@maximumRows int
)
AS
DECLARE @first_id int, @startRow int
-- A check can be added to make sure @startRowIndex isn't > count(1)
-- from employees before doing any actual work unless it is guaranteed
-- the caller won't do that
-- Get the first employeeID for our page of records
SET ROWCOUNT @startRowIndex
SELECT @first_id = employeeID FROM employees ORDER BY employeeid
-- Now, set the row count to MaximumRows and get
-- all records >= @first_id
SET ROWCOUNT @maximumRows
SELECT e.*, d.name as DepartmentName
FROM employees e
INNER JOIN Departments D ON
e.DepartmentID = d.DepartmentID
WHERE employeeid >= @first_id
ORDER BY e.EmployeeID
SET ROWCOUNT 0
GO
嘗試以下方法:
;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
您不能在WHERE
子句中引用ROW_NUMBER ,使用公用表表達式(CTE)可以幫助進行分頁。
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
訪問OFFSET FETCH ,以幫助簡化分頁並提高效率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.