Har tittat lite på exemplen här: http://www.aspfaq.com/show.asp?id=2120
Min fråga är om man kör med denna rowcountmedod behöver man bara ha med where-klausulen i det fetmarkerade området?
Efter ett test så ser jag att så verkar ju inte vara. Låt säga att jag lägger till : AND ArtistName LIKE 'b%' så funkar inte detta som tänkt. Utan måste lägga in när posterna räknas också. Om detta är en komplex fråga så kommer det att bli en rejäl prestanda förlust eller?
Kan man lägga frågan i en vy som man recyclar i stället?
CREATE PROCEDURE SampleCDs_Paging_Rowcount
@pagenum INT = 1,
@perpage INT = 50
AS
BEGIN
SET NOCOUNT ON
DECLARE
@ubound INT,
@lbound INT,
@pages INT,
@rows INT
SELECT
@rows = COUNT(*),
@pages = COUNT(*) / @perpage
FROM
SampleCDs WITH (NOLOCK)
IF @rows % @perpage != 0 SET @pages = @pages + 1
IF @pagenum < 1 SET @pagenum = 1
IF @pagenum > @pages SET @pagenum = @pages
SET @ubound = @perpage * @pagenum
SET @lbound = @ubound - (@perpage - 1)
SELECT
CurrentPage = @pagenum,
TotalPages = @pages,
TotalRows = @rows
-- this method determines the string values
-- for the first desired row, then sets the
-- rowcount to get it, plus the next n rows
DECLARE @aname VARCHAR(64), @title VARCHAR(64)
SET ROWCOUNT @lbound
SELECT
@aname = ArtistName,
@title = Title
FROM
SampleCDs WITH (NOLOCK)
ORDER BY
ArtistName,
Title
SET ROWCOUNT @perPage
[b]SELECT
ArtistName,
Title
FROM
SampleCDs WITH (NOLOCK)
WHERE
ArtistName + '~' + Title
>= @aname + '~' + @title
ORDER BY
ArtistName,
Title [/b]
SET ROWCOUNT 0
END
GO