0

私は他の多くの同様の質問を見てきましたが、これを私の声明で機能させることはできません. これは現在機能している 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 パラメーターを追加できます。

4

4 に答える 4

2

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。そこに必要な列を配置する必要があります。SQL Server 2012 の場合、これは非常に簡単です。

"SELECT * FROM tblEvents ORDER BY StartDate " & _ 
"OFFSET (@PageNum - 1) * @PageSize ROWS FETCH NEXT @PageNum ROWS ONLY"
于 2012-07-12T15:26:26.357 に答える
1
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 
于 2012-07-12T15:29:15.577 に答える
0

代わりにこれを試してください:

;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
于 2012-07-12T15:25:24.053 に答える
0

句でROW_NUMBERを参照することはできません。Common Table Expression (CTE)を使用すると、ページングに役立ちます。WHERE

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 以降では、ページングをより簡単かつ効率的にするために、 OFFSET FETCHにアクセスできます。ORDER BY

于 2012-07-12T15:31:11.063 に答える