sql分页存储过程,带求和、排序
创建存储过程:
CREATE PROCEDURE [dbo].[sp_TBTest_Query]
(
@PageSize INT, --每页多少条记录
@PageIndex INT = 1, --指定当前为第几页
@PageCount INT OUTPUT, --返回总页数
@RecordCount INT OUTPUT, --记录总和 @OrderField VARCHAR(5000), --排序字段(多字段,不含Order By)
@strWhere VARCHAR(5000), --条件语句(不用加where) @SumColumnNames NVARCHAR(200), --汇总字段
@SumResult NVARCHAR(200) OUTPUT --返回汇总结果
)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX) = '';
--条件处理
IF ISNULL(@strWhere, '') =''
BEGIN
SET @strWhere='1=1 '
end --计算总记录数
SET @SQL = N'SELECT @A = count(*) FROM TBTest where '+ @strWhere
EXEC sp_executesql @SQL, N'@A int OUTPUT', @RecordCount OUTPUT; --计算总页数
SELECT @PageCount = CEILING(( @RecordCount + 0.0 ) / @PageSize); --处理页数超出范围情况
IF @PageIndex <= 0
SET @PageIndex = 1; IF @PageIndex > @PageCount
SET @PageIndex = @PageCount; --处理开始点和结束点
DECLARE @StartRecord INT;
DECLARE @EndRecord INT; SET @StartRecord = ( @PageIndex - 1 ) * @PageSize + 1;
SET @EndRecord = @StartRecord + @PageSize - 1; --计算汇总
IF ISNULL(@SumColumnNames, '') <> ''
BEGIN
SET @SQL = N'SELECT @A = (CAST(ISNULL(SUM('
+ REPLACE(@SumColumnNames, ',','), 0) AS NVARCHAR(30)) + '','' + CAST(ISNULL(SUM(')
+ '), 0) AS NVARCHAR(30))) FROM TBTest where '+@strWhere +' '
EXEC sp_executesql @SQL, N'@A NVARCHAR(200) OUTPUT', @SumResult OUTPUT;
END --返回结果
SET @sql=N' SELECT * FROM ( SELECT * ,ROW_NUMBER() OVER(ORDER BY id DESC) AS RowID
FROM TBTest where '+@strWhere +N') t
WHERE RowID BETWEEN '+CONVERT(NVARCHAR(10),@StartRecord)+N' AND '+CONVERT(NVARCHAR(10),@EndRecord)
EXEC sp_executesql @SQL
END
- 调用代码
DECLARE @PageSize INT=10, --每页多少条记录
@PageIndex INT = 2, --指定当前为第几页
@PageCount INT , --返回总页数
@RecordCount INT , --记录总和 @OrderField VARCHAR(5000)='ID', --排序字段(多字段,不含Order By)
@strWhere VARCHAR(5000)='', --条件语句(不用加where) @SumColumnNames NVARCHAR(200)='Age', --汇总字段
@SumResult NVARCHAR(200) --返回汇总结果 EXEC sp_TBTest_Query @PageSize,@PageIndex,@PageCount OUTPUT,@RecordCount OUTPUT,@OrderField,@strWhere,@SumColumnNames,@SumResult OUTPUT SELECT @PageCount AS 'PageCount',@RecordCount AS 'RecordCount',@SumResult AS 'SUM'
- 测试结果


我在项目中遇到一个问题,就是元数据由分组,然后再连接,为了加快查询效率,我不得不剔除传入Where条件字符串中的一个条件,大概写法如下:
DECLARE @strWhere NVARCHAR(max)='ID=1 and Age=2 and address=''销售部'''
DECLARE @str1 NVARCHAR(max)=''
DECLARE @str2 NVARCHAR(max)=''
IF ISNULL(@strWhere, '')<>''
BEGIN
IF( CHARINDEX('Age',@strWhere)>0 )
BEGIN
SET @str1 =SUBSTRING(@strWhere,CHARINDEX('Age',@strWhere),LEN(@strWhere))
if CHARINDEX('and',@str1)>0
begin
SET @str2 =SUBSTRING(@str1,CHARINDEX('and',@str1),LEN(@str1))
end
SET @strWhere=SUBSTRING(@strWhere,0,CHARINDEX('Age',@strWhere))+N' 1=1 '+@str2
end
END
sql分页存储过程,带求和、排序的更多相关文章
- [转]关于SQL分页存储过程的分析
[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...
- 完整SQL分页存储过程(支持多表联接)
http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************* ...
- Delphi调用SQL分页存储过程实例
Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...
- 关于SQL分页存储过程的分析
建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...
- asp.net sql 分页,,优化 排序 及分页,
调用代码: <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix ...
- 真正通用的SQL分页存储过程
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...
- SQL - 分页存储过程
http://www.jb51.net/article/71193.htm http://www.webdiyer.com/utils/spgenerator/ create PROCEDURE [d ...
- 修改后的SQL分页存储过程,利用2分法,支持排序
/****** Object: StoredProcedure [dbo].[sys_Page_v3] Script Date: 08/13/2014 09:32:28 ******/ SET ANS ...
- SQL分页存储过程——表名、返回的列、排序字段、排序类型、条件、页尺寸、页码
ALTER PROCEDURE [dbo].[SP_LGY_ICU_PAGECUT] ), -- 表名 ) = '*', -- 需要返回的列 )='''', -- 排序的欄位名 , -- 設置排序類型 ...
随机推荐
- pycharm激活,此方法为永久激活。
1.下载JetbrainsCrack-3.1-release-enc.jar文件 链接: https://pan.baidu.com/s/1eN4paXtLVLeUN1nLP335rA 提取码: yg ...
- autotools使用
autotools制作makefile 下面以hello.c来说明生成makefile的过程. 基本步骤如下: 1)autoscan命令生成configure.scan文件,重命名configure. ...
- 瑞发科NS1081主控 + THGBM5G7A2JBAIR(eMMC) 制作16GB闪存驱动器
文档标识符:NS1081_FLASH-DRIVE_D-P9 作者:DLHC 最后修改日期:2020.8.22 本文链接:https://www.cnblogs.com/DLHC-TECH/p/NS10 ...
- 操作系统-PV习题
(1)阅览室问题:加入阅览室入口有一本登记册,每个人都必须按顺序签名进去. 想法:登记册可以用结构数组A[]表示,包含name和number.此外,还需要信号量seatcount表示剩余座位数. 使用 ...
- ReplayingDecoder 解码器:别以为我有多厉害,也只不过是使用了一下装饰器模式而已~
原文地址 一.设计模式为啥老是用不好? 想要写出更屌的代码,提高代码的健壮性和可扩展性,那么设计模式可谓是必学的技能. 关于学习设计模式,大家可能都觉得设计模式的概念太过于抽象,理解起来有点费劲:又或 ...
- 蒲公英 · JELLY技术周刊 Vol.19 从零开始的 Cloud IDE 开发
蒲公英 · JELLY技术周刊 Vol.19 你是否也会有想法去开发一个自己的 IDE 却苦于时间和精力不足,完成 Desktop IDE 却又被 Cloud IDE 的概念追在身后难以入睡,这样的两 ...
- LR与LR?
目录 逻辑回归与线性回归 逻辑回归 1.建立目标函数 2. 梯度求解 3. 实现 线性回归 1. 建立目标函数 2. 求解 3. 实现 逻辑回归与交叉熵 逻辑回归与线性回归 逻辑回归 线性回归 目标函 ...
- idea,git操作
原文地址:https://blog.csdn.net/lzx2018/article/details/91414591 1新建分支 点击New Branch 2切换分支
- 关于提高服务器的带宽策略bonding
一:bonding的概念 所谓bonding就是将多块网卡绑定同一IP地址对外提供服务,可以实现网卡的带宽扩容.高可用或者负载均衡. 二:bonding的优势 1 网络负载均衡 2 提高带宽网络传输效 ...
- 在Spring中拦截器的使用
Filter Filter是Servlet容器实现的,并不是由Spring 实现的 下面是一个例子 import java.io.IOException; import javax.servlet.F ...