SQL 分页通用存储过程
USE [DB]
GO
/****** Object: StoredProcedure [dbo].[SP_AspNetPager] Script Date: 10/23/2015 16:37:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO ALTER PROCEDURE [dbo].[SP_AspNetPager]
@PageSize INT = , -- 页尺寸
@PageIndex INT = , -- 页码
@TableName VARCHAR() , -- 表名
@KeyFields VARCHAR() = '' , -- 排序的字段名
@ShowFields VARCHAR() = '*' , -- 需要返回的列
@OrderType BIT = , -- 设置排序类型, 非 值则降序
@WhereString VARCHAR() = '', -- 查询条件 (注意: 不要加 where)
@OrderFields VARCHAR()='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
@RecordCount int OUTPUT --总页数
AS
DECLARE @StrSQL VARCHAR() -- 主语句
DECLARE @StrTmp VARCHAR() -- 临时变量
DECLARE @StrOrder VARCHAR() -- 排序类型 IF @RecordCount IS NULL
BEGIN
DECLARE @sql nvarchar()
SET @sql=N'SELECT @RecordCount=COUNT(*)'
+N' FROM '+@TableName
+N' WHERE '+@WhereString
EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT
end --以上代码的意思是如果@DoCount传递过来的不是0,就执行总数统计。以下的所有代码都是@DoCount为0的情况
IF @OrderType !=
BEGIN
SET @StrTmp = '<(select min'
SET @StrOrder = ' order by [' + @KeyFields + '] desc'
--如果@OrderType不是0,就执行降序,这句很重要!
END
ELSE
BEGIN
SET @StrTmp = '>(select max'
SET @StrOrder = ' order by [' + @KeyFields + '] asc'
END
IF @PageIndex =
BEGIN
IF @WhereString != ''
SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
+ @ShowFields + ' from [' + @TableName
+ '] where ' + @WhereString + ' ' + @StrOrder
ELSE
SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
+ @ShowFields + ' from [' + @TableName + '] '
+ @StrOrder
--如果是第一页就执行以上代码,这样会加快执行速度
END
ELSE
BEGIN
--以下代码赋予了@StrSQL以真正执行的SQL代码
SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
+ @ShowFields + ' from [' + @TableName + '] where ['
+ @KeyFields + ']' + @StrTmp + '([' + @KeyFields
+ ']) from (select top ' + STR(( @PageIndex - )
* @PageSize) + ' ['
+ @KeyFields + '] from [' + @TableName + ']' + @StrOrder
+ ') as tblTmp)' + @StrOrder
IF @WhereString != ''
SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
+ @ShowFields + ' from [' + @TableName
+ '] where [' + @KeyFields + ']' + @StrTmp + '(['
+ @KeyFields + ']) from (select top '
+ STR(( @PageIndex - ) * @PageSize) + ' ['
+ @KeyFields + '] from [' + @TableName + '] where '
+ @WhereString + ' ' + @StrOrder
+ ') as tblTmp) and ' + @WhereString + ' '
+ @StrOrder
END
EXEC (@StrSQL)
SQL 分页通用存储过程的更多相关文章
- 改良版的SQL Service 通用存储过程分页
上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...
- 【原创】SQL分页查询存储过程
------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...
- SqlServer通用存储过程
1.增删改—通用存储过程 --增删改 存储过程create proc Infos_InsertUpdateDelete( @Id int, @Name varchar(50), @DataTable_ ...
- SQL Server 的通用分页显示存储过程
建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...
- 真正通用的SQL分页存储过程
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...
- SQL Server 的通用分页显示存储过程(转载)
http://database.51cto.com/art/200512/12923.htm 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是: ...
- Sql Server通用分页存储过程
Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList] ( @TableName nvarchar(100), --表名 ...
- [转]关于SQL分页存储过程的分析
[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...
- 关于SQL分页存储过程的分析
建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...
随机推荐
- bzoj1211: [HNOI2004]树的计数(purfer编码)
BZOJ1005的弱化版,不想写高精度就可以写这题嘿嘿嘿 purfer编码如何生成?每次将字典序最小的叶子节点删去并将其相连的点加入序列中,直到树上剩下两个节点,所以一棵有n个节点的树purfer编码 ...
- layui中对表格操作按钮集的判断
可用如下语法: {{# if(d.IsAudit==false){ }} <a class='layui-btn layui-btn-xs layui-btn-normal' lay-event ...
- ACE_DEBUG介绍及日志输出
转载于:http://blog.csdn.net/zzjxiaozi/article/details/6642925 ACE_DEBUG 常规的一些输出消息 ACE_ERROR 会提供程序出错 ...
- Reduce Side Join实现
关于reduce边join,其最重要的是使用MultipleInputs.addInputPath这个api对不同的表使用不同的Map,然后在每个Map里做一下该表的标识,最后到了Reduce端再根据 ...
- arm开发板刷机方法
1.linux系统启动方式 bootloader->kernel->system 在嵌入式系统中内存为DRAM,inand flash 都不能直接启动需要被初始化.其中初始化程序在(boo ...
- JupyterHub的安装与配置——让Jupyter支持多用户
1.下载anaconda 打开https://www.continuum.io/downloads,找到自己要的版本 如:https://repo.anaconda.com/archive/Anaco ...
- java通过各种类型驱动连接数据库
常见数据库驱动实现类:JDBC-ODBC:sun.jdbc.odbc.JdbcOdbcDriver Oracle:oracle.jdbc.driver.OracleDriver MySQL:com.m ...
- 【JSP EL】EL表达式获取当前时间(两种方式)
第一种方式: //先在代码段定义<% long date = new Date().getTime(); request.setAttribute("date", date) ...
- UVALive-4670 Dominating Patterns / 洛谷 3796 【模板】AC自动机
https://vjudge.net/problem/UVALive-4670 中文题面:https://www.luogu.org/problem/show?pid=3796 AC自动机模板 注意如 ...
- 图论:Floyd-多源最短路、无向图最小环
在最短路问题中,如果我们面对的是稠密图(十分稠密的那种,比如说全连接图),计算多源最短路的时候,Floyd算法才能充分发挥它的优势,彻彻底底打败SPFA和Dijkstra 在别的最短路问题中都不推荐使 ...