热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL通用分页查询存储过程

存储过程CREATEPROCEDURE[dbo].[QueryByPage]@TableNameNVARCHAR(50),--表名@PageSizeINT10,--每次多少条@Pa

存储过程

CREATE PROCEDURE [dbo].[QueryByPage]
@TableName NVARCHAR(50),--表名
@PageSize INT =10,--每次多少条
@PageIndex INT =1,--第几页
@Filter NVARCHAR(MAX) =NULL,--筛选条件
@SortColumn NVARCHAR(MAX) =NULL,--按哪个字段排序,这个必须赋值
@IsAsc BIT=1,--按ASC还是DESC排序,
@ShowColumn NVARCHAR(MAX) ='*'--显示的列名字
AS
--用到的变量
DECLARE @SQLStr NVARCHAR(MAX) --最终执行的sql语句
DECLARE @CountSqlStr NVARCHAR(MAX) --获取总共条数的sql语句
DECLARE @AscStr NVARCHAR(100) --排序
DECLARE @FilterStr NVARCHAR(MAX) --筛选
DECLARE @Count INT --总共的条数
BEGIN
---必传参数判断
IF @TableName IS NULL OR @TableName='' OR @SortColumn IS NULL OR @SortColumn=''
BEGIN
RETURN
END
--如果没有填写显示的列,默认显示全部
IF @ShowColumn IS NULL OR @ShowColumn=''
BEGIN
SET @ShowColumn='*'
END
--1:ASC;0:DESC
IF @IsAsc=1
BEGIN
SET @AscStr =@SortColumn+' ASC ';
END
ELSE
BEGIN
SET @AscStr =@SortColumn+' DESC ';
END
--组合筛选的SQL
IF @Filter IS NULL OR @Filter =''
BEGIN
SET @FilterStr='';
END
ELSE
BEGIN
SET @FilterStr=' WHERE '+@Filter;
END
---拼接分页查询的SQL
SET @SQLStr='SELECT '+@ShowColumn +' FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY '
+@AscStr+' ) AS NUM,'+@ShowColumn + ' FROM '+@TableName +@FilterStr +' ) AS T WHERE T.NUM BETWEEN ('
+CONVERT(NVARCHAR,((@PageIndex-1)*@PageSize+1))+') AND ' +CONVERT(NVARCHAR,(@PageSize*@PageIndex));
---拼接查询总条数的SQL
SET @CountSqlStr= ' SELECT @TEST=COUNT(*) FROM '+@TableName +@FilterStr
EXEC sp_executesql @CountSqlStr ,N'@TEST INT OUTPUT',@Count OUTPUT
SELECT @Count AS Total;
---执行
EXEC(@SQLStr)
END
GO

C#调用

var sqlParas = new SqlParameter[7];
sqlParas[0] = new SqlParameter("@ShowColumn", DbType.String)
{
Value = "Column1,Column2,Column3,Column4",
Direction = System.Data.ParameterDirection.Input
};
sqlParas[1] = new SqlParameter("@TableName", DbType.String)
{
Value = "TableName",
Direction = System.Data.ParameterDirection.Input
};
sqlParas[2] = new SqlParameter("@PageSize", DbType.Int32)
{
Value = pageSize,
Direction = System.Data.ParameterDirection.Input
};
sqlParas[3] = new SqlParameter("@PageIndex", DbType.Int32)
{
Value = pageIndex,
Direction = System.Data.ParameterDirection.Input
};
sqlParas[4] = new SqlParameter("@Filter", DbType.String)
{
//类似 :" USERID >= '100' AND TIME >= GETDATE()"
Value = filterStr,
Direction = System.Data.ParameterDirection.Input
};
sqlParas[5] = new SqlParameter("@SortColumn", DbType.String)
{
//按哪个字段排序,这个必须赋值
Value = "SortColumn",
Direction = System.Data.ParameterDirection.Input
};
sqlParas[6] = new SqlParameter("@IsAsc", DbType.Binary)
{
Value = 0,
Direction = System.Data.ParameterDirection.Input
};
#endregion
DBHelper dbhelper = new DBHelper();
var ds = dbhelper.ExcuteDataByProcedure("QueryByPage", sqlParas);
//总条数
total = int.Parse(ds.Tables[0].Rows[0][0].ToString());
//pageSize 和pageIndex 查出的值
var dt = ds.Tables[1];

推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
author-avatar
Sunshine5585
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有