当前位置:Gxlcms > 数据库问题 > T-SQL分页功能存储过程

T-SQL分页功能存储过程

时间:2021-07-01 10:21:17 帮助过:2人阅读

PROCEDURE [dbo].[P_SplitPagesQuery] @TablesName NVARCHAR(MAX),--表名或视图名(只能传单一表名) @PK NVARCHAR(MAX)=‘‘,--主键(可以为空!) @StrSort NVARCHAR(MAX)=‘‘,--排序字段(按照这个字段对查询结果进行排序),不能为空 @SortType INT =0,--排序方式,默认为0(升序),1为降序 @StrWhere NVARCHAR(MAX)=‘‘,--查询条件(即sql语句中的where后面部分) @Fields NVARCHAR(MAX)=*,--读取字段(呈现出来的字段) @PageCurrent INT =1,--当前页码,默认为1 @PageSize INT =10,--页面大小,默认为10 @PageCount INT OUTPUT,--总页数(按照页面大小一共分了多少页) @RecordCount INT OUTPUT--查询结果的总条数 AS /* 返回值说明:查询结果(表) */ DECLARE @SqlStr nvarchar(4000) IF @StrWhere IS NOT NULL AND @StrWhere != ‘‘ BEGIN SET @StrWhere = WHERE + @StrWhere + END ELSE BEGIN SET @StrWhere = ‘‘ END BEGIN IF @StrSort = ‘‘ IF @PK IS NOT NULL AND @PK!=‘‘ SET @StrSort = @PK IF @PageCurrent < 1 SET @PageCurrent = 1 IF @SortType = 1 AND @StrSort!=‘‘ SET @StrSort = @StrSort + DESC IF @SortType = 0 AND @StrSort!=‘‘ SET @StrSort = @StrSort + ASC IF @PageCurrent = 1 --第一页提高性能 BEGIN SET @SqlStr = SELECT TOP + str(@PageSize) + +@Fields+ FROM + @TablesName + AS tb + @StrWhere IF @StrSort!=‘‘ SET @SqlStr = @SqlStr + ORDER BY + @StrSort END ELSE BEGIN DECLARE @StartPos NVARCHAR(50) DECLARE @EndPos NVARCHAR(50) SET @StartPos = CONVERT(NVARCHAR(50),(@PageCurrent - 1) * @PageSize + 1) SET @EndPos = CONVERT(NVARCHAR(50),@PageCurrent * @PageSize) SET @SqlStr = SELECT +@Fields+ FROM (SELECT ROW_NUMBER() OVER(ORDER BY +@StrSort+) AS RowNum , tb.* + FROM +@TablesName+ AS tb +@StrWhere+) AS D WHERE RowNum BETWEEN +@StartPos+ AND +@EndPos IF @StrSort!=‘‘ SET @SqlStr = @SqlStr + ORDER BY + @StrSort END END print @SqlStr EXEC(@SqlStr) DECLARE @SqlCount NVARCHAR(4000) SET @SqlCount = SELECT @RecordCount=COUNT(*),@PageCount=CEILING((COUNT(*)+0.0)/ + CAST(@PageSize AS VARCHAR)+) FROM + @TablesName + @StrWhere --输出参数赋值 EXEC SP_EXECUTESQL @SqlCount,N@RecordCount INT OUTPUT,@PageCount INT OUTPUT, @RecordCount OUTPUT,@PageCount OUTPUT

调用示例

EXEC @x =[dbo].[P_SplitPagesQuery] 表或视图,‘‘,@sOrderBy,@nOrderTpye,@sSqlString,*,
        @nPageNum,@nPageSize,@PageCount OUTPUT,@RecordCount OUTPUT

......

T-SQL分页功能存储过程

标签:

人气教程排行