加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

超强的分页存储过程 可用来各种查询

发布时间:2020-12-12 14:42:50 所属栏目:MsSql教程 来源:网络整理
导读:? CREATE PROCEDURE [dbo].[GetPagingList]( @Table nvarchar(1000),????????? --表名 @Field nvarchar(1000) = '*',??????? --读取字段 @Where? nvarchar(500) = NULL,?????? --Where条件 @GroupBy nvarchar(500) = NULL,????? --分组 @OrderBy nvarchar(50
?


CREATE PROCEDURE [dbo].[GetPagingList](
@Table nvarchar(1000),????????? --表名
@Field nvarchar(1000) = '*',??????? --读取字段
@Where? nvarchar(500) = NULL,?????? --Where条件
@GroupBy nvarchar(500) = NULL,????? --分组
@OrderBy nvarchar(500)= NULL,?????? --排序字段
@PrimaryKeyField nvarchar(50),????? --主键必需?
@PageNumber int = 1,??????????? --开始页码
@PageSize int = 10,???????????? --页大小
@IsCount bit = 0??????????? --是否返回记录总数
)
AS
BEGIN
??? ------------------------------------------------------------------------------------------------
??? DECLARE @strWhere nvarchar(500)???????????????????? --Where 条件
??? IF @Where IS NOT NULL AND @Where != ''????????????? --Where 条件
??? BEGIN
??????? SET @strWhere = ' WHERE ' + @Where + ' '
??? END
??? ELSE
??? BEGIN
??????? SET @strWhere = ''
??? END
??? ----------------------------------------------------------------------------------------------------
??? DECLARE @strGroupBy nvarchar(500)?????????????????? --GroupBy 条件
??? IF @GroupBy IS NOT NULL AND @GroupBy != ''????????? --GroupBy 条件
??? BEGIN
??????? SET @strGroupBy = ' GROUP BY ' + @GroupBy + ' '
??? END
??? ELSE
??? BEGIN
??????? SET @strGroupBy = ''
??? END
??? ----------------------------------------------------------------------------------------------------
??? DECLARE @strOrderBy nvarchar(500)?????????????????? --OrderBy 条件
??? IF @OrderBy IS NULL OR @OrderBy = ''??????????????? --OrderBy 条件
??? BEGIN
??????? SET @strOrderBy = ' ORDER BY ' + @PrimaryKeyField + ' DESC'
??? END
??? ELSE
??? BEGIN
??????? SET @strOrderBy = ' ORDER BY ' + @OrderBy
??? END
??? ----------------------------------------------------------------------------------------------------
??? DECLARE @strSql nvarchar(max)?? --Sql 语句
??? --计算总行数
??? IF @IsCount = 1
??? BEGIN
??????? SET @strSql= 'SELECT? Count (*) AS RecordCount FROM ' + @Table + @strWhere + @strGroupBy
??????? EXEC sp_executesql @strSql
??????? RETURN?
??? END?
??? ----------------------------------------------------------------------------------------------------
??? IF @PageNumber < 1????????????????????????????????? --第一页提高性能
??? BEGIN???
??????? SET @PageNumber = 1
??? END

??? IF @PageNumber = 1?????????????????????????? ??? BEGIN ??????? SET @strSql = 'SELECT TOP ' + str(@PageSize) +? ' ' + @Field + ' FROM ' + @Table +? ?????????????????????? @strWhere + @strGroupBy + @strOrderBy ??????? EXEC sp_executesql @strSql ??????? RETURN ??? END ??? ---------------------------------------------------------------------------------------------------- ??? --根据 SqlServer 2005 帮助得到下面的语句??? ??? DECLARE @STARTID nvarchar(50) ??? DECLARE @ENDID nvarchar(50) ??? SET @STARTID = convert(nvarchar(50),(@PageNumber - 1) * @PageSize + 1) ??? SET @ENDID = convert(nvarchar(50),@PageNumber * @PageSize) ??? SET @strSql = 'WITH MYTABLE AS (SELECT ROW_NUMBER() OVER (' + @strOrderBy + ') ?????????????????? AS RowNumber,' + @Field + ' FROM '+ @Table +? @strWhere + @strGroupBy + ')? ?????????????????? SELECT * FROM MYTABLE? ?????????????????? WHERE RowNumber BETWEEN ' + @STARTID + ' AND ' + @ENDID ??? EXEC sp_executesql @strSql ??? -------------------------------------------------------------------------------------------------- END

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读