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自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...
随机推荐
- 认识MEAN开发框架[转]
MEAN是一个Javascript平台的现代Web开发框架总称,它是MongoDB + Express +AngularJS + NodeJS 四个框架的第一个字母组合. MongoDB是一个使用JS ...
- [codeforces/edu2]总结(F)
链接:http://codeforces.com/contest/600 A题: 字符串处理. B题: sort+upper_bound C题: 统计一下每种字符的个数,然后贪心. (1) 如果没有奇 ...
- 洛谷:P2292 [HNOI2004]L语言(DP+Trie树)
P2292 [HNOI2004]L语言 题目链接:https://www.luogu.org/problemnew/show/P2292 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有 ...
- Transformation 线段树好题 好题 (独立写出来对线段树不容易)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
- 用HTML5 File API 实现截图粘贴上传、拖拽上传
<!DOCTYPE html><html><head> <title>test chrome paste image</title> < ...
- 【Android】Android之USB
[转载请注明出处] 首先介绍一个概念:USB Host and Accessory Android通过两种模式支持一系列的USB外围设备和Android USB附件(实现了Android附件协议的硬件 ...
- wiki文档书写格式
文档基本规范 标题 标题:标明需求的简短语句.或模块名称,目录是由标题生成,一份目录结构清晰的需求文档与标题的划分是密不可分. 正文 正文:有规范格式和生效标志的正式文本,正文包括 文字.表格.图片. ...
- JNLP Slave connection error解决办法
Replace in jnlp-file <argument>-workDir</argument> <argument /> with <argume ...
- 天气预报service
https://weather.com/ https://api.weather.com/v2/turbo/vt1dailyForecast?apiKey=c1ea9f47f6a88b9acb43ab ...
- 「6月雅礼集训 2017 Day8」gcd
[题目大意] 定义times(a, b)表示用辗转相除计算a和b的最大公约数所需步骤. 那么有: 1. times(a, b) = times(b, a) 2. times(a, 0) = 0 3. ...