T-SQL分页功能存储过程
分页功能存储过程
ALTER 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分页功能存储过程的更多相关文章
- oracle带输入输出参数存储过程(包括sql分页功能)
记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...
- 【原创】SQL分页查询存储过程
------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...
- SQL 分页通用存储过程
USE [DB] GO /****** Object: StoredProcedure [dbo].[SP_AspNetPager] Script Date: 10/23/2015 16:37:33 ...
- PL/SQL编程—分页功能(存储过程)
SQL),bookname ),publish )); Table created SQL> SQL> create or replace procedure sp_add_book(bo ...
- SQL Server 的通用分页显示存储过程
建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...
- [转]关于SQL分页存储过程的分析
[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...
- SQL Server 的通用分页显示存储过程(转载)
http://database.51cto.com/art/200512/12923.htm 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是: ...
- 关于SQL分页存储过程的分析
建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...
- 真正通用的SQL分页存储过程
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...
随机推荐
- restful规则
参考连接:https://blog.igevin.info/posts/restful-api-get-started-to-write/#url_rules https://juejin.im/po ...
- webstorm-前端javascript开发神器中文教程和技巧分享(转)
webstorm是一款前端javascript开发编辑的神器,此文介绍webstorm的中文教程和技巧分享. webstorm8.0.3中文汉化版下载:百度网盘下载:http://pan.baidu. ...
- 实现一个自定义<table>标签
需求是有两个自定义的标签<table>和<column> <table>有个items属性,负责导入数据 package hello; import java.ut ...
- 微信 unionid 获取 解密数据
1.申请注册微信开放平台 open.weixin.qq.com 2.绑定公众号或者小程序到微信开放平台 3.微信公众号的话,使用微信网页授权获取 unionid https://mp.weixin. ...
- java实现一个最简单的tomcat服务
在了解tomcat的基本原理之前,首先要了解tomcatt最基本的运行原理. 1.如何启动? main方法是程序的入口,tomcat也不例外,查看tomcat源码,发现main是在Bootstrap ...
- protobuff java 包编译(Windows)
google probuffer的强大,很多人都知道,但是官方的source 里是没有jar下载,唯有源码下载,故需自己编译得到jar. java 的jar的编译采用maven 编译的,因此需先构建m ...
- 微服务监控之二:Metrics+influxdb+grafana构建监控平台
系统开发到一定的阶段,线上的机器越来越多,就需要一些监控了,除了服务器的监控,业务方面也需要一些监控服务.Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成自定义的监控工作. 使 ...
- 分布式锁之三:mysql实现-待整理
下面我们来看下开源dubbo推荐的业界成熟的zookeeper做为注册中心, zookeeper是hadoop的一个子项目是分布式系统的可靠协调者,他提供了配置维护,名字服务,分布式同步等服务.对于z ...
- 屏蔽sql server 2008的智能提示
1. 去掉这个勾 2. 如果你安装了Sql complete, 接着下面的
- Py修行路 python基础 (十六)面向对象编程的 继承 多态与多态性 封装
一.继承顺序: 多继承情况下,有两种方式:深度优先和广度优先 1.py3/py2 新式类的继承:在查找属性时遵循:广度优先 继承顺序是多条分支,按照从左往右的顺序,进行一步一步查找,一个分支走完会走另 ...