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 分页通用存储过程的更多相关文章

  1. 改良版的SQL Service 通用存储过程分页

    上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...

  2. 【原创】SQL分页查询存储过程

    ------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...

  3. SqlServer通用存储过程

    1.增删改—通用存储过程 --增删改 存储过程create proc Infos_InsertUpdateDelete( @Id int, @Name varchar(50), @DataTable_ ...

  4. SQL Server 的通用分页显示存储过程

    建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...

  5. 真正通用的SQL分页存储过程

    关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...

  6. SQL Server 的通用分页显示存储过程(转载)

    http://database.51cto.com/art/200512/12923.htm 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是: ...

  7. Sql Server通用分页存储过程

    Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList] ( @TableName nvarchar(100), --表名 ...

  8. [转]关于SQL分页存储过程的分析

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  9. 关于SQL分页存储过程的分析

    建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...

随机推荐

  1. 实验三 Java敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计                         班级:1353            姓名:陈巧然     ...

  2. HDU.2734 Quicksum

    Quicksum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. webpack开发模式和生产模式设置及不同环境脚本执行

    1. webpack设置开发模式和生产模式 (1). DefinePlugin插件设置 new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '& ...

  4. bzoj1257: [CQOI2007]余数之和sum(数论)

    非常经典的题目... 要求 则有 实际上 最多只有2*sqrt(k)种取值,非常好证明 因为>=sqrt(k)的数除k下取整得到的数一定<=sqrt(k),而k除以<=sqrt(k) ...

  5. ucenter通信实现同步登录、同步退出(详细)

    首先,需要去官网下载一个ucenter的包.然后解压下来. 先把ucenter/ucenter这个文件夹复制到你的项目根目录下改名为uc_server;(这里只是我建议修改,以便于我下面写的配置); ...

  6. PowerDesigner 技巧【3】

    一.PowerDesigner导出所有SQL脚本: 一般的导出SQL脚本只需要下面两个步骤: 1.database->change current DBMS(选择需要导出的数据库类型): 2.d ...

  7. Spring源码解析-Web容器启动过程

    Web容器启动过程,主要讲解Servlet和Spring容器结合的内容. 流程图如下: Web容器启动的Root Context是有ContextLoaderListener,一般使用spring,都 ...

  8. 使用snmp4j实现Snmp功能(二)

    相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) 前一篇文章讲了如何用snmp4j实现set和get的功能, ...

  9. Struts整合ExtJS

    1准备工作: 除了平时引入的struts2的jar包以外,还需要引入struts2-json-plugin-2.1.8.1.jar:json-lib-2.1.jar这两个包. 2.建立我们的model ...

  10. CSS3知识之阴影box-shadow

    一.定义和用法 box-shadow 属性向框添加一个或多个阴影. box-shadow: h-shadow v-shadow blur spread color inset; h-shadow   ...