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自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...
随机推荐
- UVA.540 Team Queue (队列)
UVA.540 Team Queue (队列) 题意分析 有t个团队正在排队,每次来一个新人的时候,他可以插入到他最后一个队友的身后,如果没有他的队友,那么他只能插入到队伍的最后.题目中包含以下操作: ...
- sass的循环for,while,each
1. for @for $i from 1 to 10 { .border-#{$i} { border: #{$i}px solid blue; } } 2. while $i: 6; @while ...
- android脱壳之DexExtractor原理分析[zhuan]
http://www.cnblogs.com/jiaoxiake/p/6818786.html内容如下 导语: 上一篇我们分析android脱壳使用对dvmDexFileOpenPartial下断点的 ...
- POJ 2976 二分
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12515 Accepted: 4387 D ...
- sub-G 无线芯片基础知识
1.典型无线收发机编码 2.前导码的作用是使接收机的时钟和发射机同步(有待验证),如果接收机工作在WOR模式,前导码还有唤醒接收机的功能(接收一定数量的前导码),此时发射机必须发送较长的前导码才能把接 ...
- linux用户管理和文件权限
linux用户管理和文件权限 新建用户:useradd ftpuser useradd -g gxx userxx修改密码:passwd ftpuser新增用户组:# groupadd gr ...
- Spring @Async开启异步任务
1. 开启异步 @SpringBootApplication @EnableAsync //开启异步任务 public class Application { @Bean(name="pro ...
- 2015/9/3 Python密码输入屏蔽字符
在使用Python的过程中,想输入账号和密码,但是密码会随着输入显示在屏幕上,为了解决这个问题需要用到msvcrt模块 这里是使用代码 import msvcrt, sys def pwd_input ...
- 2015/8/26 Python基础(1):基本规则及赋值
Python有如下的基本规则: #后表示注释 \n是行分隔符 \是继续上一行,将过长语句分开 :分号将两个语句连接在一行中 :冒号将代码头和体分开 代码块用缩进块的方式体现 不同缩进深度分隔不同的代码 ...
- Mybatis xml 写sql如何判断集合的size
在mybtis的映射文件中判断集合大小 list.size 例子如下: <if test="groupIds != null and groupIds.size>0" ...