Use one CTE many times

后端 未结 6 1980
鱼传尺愫
鱼传尺愫 2020-12-13 17:16

I have this, and i get an error at set total. Why can\'t i access a cte many times?

ALTER PROCEDURE [dbo].[GetLeaguePlayers]
(
    @idleague int,
    @pageNu         


        
6条回答
  •  猫巷女王i
    2020-12-13 17:29

    In this case, I use this:

    ALTER PROCEDURE [dbo].[GetLeaguePlayers]
    (
     @idleague int,
     @pageNumber int,
     @pageSize int,
     @total int OUTPUT
    )
    AS
    
    WITH CTEPlayers AS
    (
        SELECT ROW_NUMBER() OVER (ORDER BY p.Name) AS RowNumber,    
            COUNT(1) OVER () AS RecordCount,
        p.Id, p.Name,   
        t.Name AS Team
        FROM Players p 
            INNER JOIN Teams t ON p.IdTeam=t.Id 
            INNER JOIN Leagues l ON l.Id=t.IdLeague
        WHERE l.Id=@idleague
    )
    
    SELECT RowNumber,
        CAST(CEILING(CAST(RecordCount AS FLOAT) / CAST(@pageSize AS FLOAT)) AS INT) PageCount,
        RecordCount,
        Id, 
        Name
    FROM CTEPlayers c
    WHERE RowNumber > @pageSize*(@pageNumber-1) AND RowNumber < @pageSize*@pageNumber;
    

提交回复
热议问题