webForumDet fria alternativet

Paging med SP

1 svar · 277 visningar · startad av Jesper T

Jesper TMedlem sedan nov. 20017 058 inlägg
#1

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
BrimbaMedlem sedan dec. 19992 966 inlägg
#2

Om du hämtar ditt sökresultat och cachar det på klienten/webbservern eller vad du nu har så brukar det bli bättre prestanda, men annars finns det en hel uppsjö artiklar som tar upp det du frågar efter. Här är några länkar.

http://www.developersdex.com/gurus/code/836.asp
http://www.dotnetjunkies.com/Article/975BE770-E5DC-4610-870B-A82BDB9B8845.dcik
http://www.15seconds.com/issue/010308.htm
http://www.4guysfromrolla.com/webtech/062899-1.shtml

Lycka till!

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb