存储过程递归查询及分页示例

数据表【CN_New_Category】截图:

 

 
存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        ZHAOWEI
-- Create date: 20120410
-- Description:    选取新闻中心所有类别下的数据
-- =============================================
--exec CN_New_GetAllByCategoryID 20,10,0
alter PROCEDURE CN_New_GetAllByCategoryID
(
   
    @CategoryID        int,
    @PageSize        INT,
    @PageIndex        INT
)
AS
BEGIN
    SET NOCOUNT ON;
   
    DECLARE @strStartRow    NVARCHAR(50)
    DECLARE @strEndRow        NVARCHAR(50)
    declare @RecordTable table
    (
        [id] int
      ,[categoryid] int
      ,[title] nvarchar(500)
      ,[titlecolor] varchar(100)
      ,[isbold] int
      ,[content] ntext
      ,[contentpagecount] int
      ,[titlelink] varchar(255)
      ,[image] varchar(50)
      ,[imagelink] varchar(150)
      ,[tempstate] int
      ,[skin] int
      ,[status] int
      ,[publishdate] datetime
      ,[validata] datetime
      ,[newtodata] datetime
      ,[createdate] datetime
      ,[writedate] datetime
      ,[inforesource] varchar(50)
      ,[newskey1] nvarchar(100)
      ,[newskey2] nvarchar(100)
      ,[newskey3] nvarchar(100)
      ,[productkey1] nvarchar(100)
      ,[productkey2] nvarchar(100)
      ,[productkey3] nvarchar(100)
      ,[ordernumber] int
      ,[newsfrom] varchar(500)
      ,[viewcount] int
      ,[item1] varchar(100)
      ,[item2] varchar(100)
      ,[item3] varchar(100)
    )

    SET  @strStartRow = @PageIndex*@PageSize + 1;
    SET  @strEndRow   = @PageIndex*@PageSize + @PageSize;

    with Categorys(ID,ParentID,CategoryID1,CategoryID2,CategoryID3,CategoryID4,CategoryName,LevelID,CategoryURL,
    Status,BGColor,BGImage,TempState,OrderNumber,TitleColor,IsBold)
    as
    (
        select * from CN_New_Category where LevelID=1 and id=@CategoryID
        union all
        select SC.* FROM CN_New_Category SC
            INNER JOIN Categorys C ON SC.ParentID=C.ID
    )
   
    insert into @RecordTable
    select * from CN_New_Info where categoryid in
    (
    select id from Categorys
    )
    SELECT T.*
    FROM
    (
    select row_number() over (order by createdate desc) as SNO,* from @RecordTable
    ) AS T
    WHERE T.SNO>=@strStartRow AND T.SNO<=@strEndRow
   
    SELECT COUNT(ID) AS recordcount FROM @RecordTable
END
GO


测试运行结果截图:

 


 
 
 
posted @   skybirdzw  阅读(329)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示