/****** 对象:  StoredProcedure [dbo].[P_CommonPagination]    脚本日期: 07/22/2009 10:22:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO -- =============================================
-- Author:
-- Create date: 2008-12-16
-- Description: 支持DISTINCT的通用分页存储过程(SQL2005)
-- =============================================
CREATE PROCEDURE [dbo].[P_CommonPagination]
(
-- 列名称
@Fields NVARCHAR(MAX) = '*',
-- 表名称
-- 不允许为空
@Table NVARCHAR(MAX),
-- 查询条件
@Where NVARCHAR(MAX) = '',
-- 排序的字段
-- 不允许为空,无排序字段时可指定主键
@Order NVARCHAR(MAX),
-- 页码
@PageIndex INT = 1,
-- 每页数据
@PageSize INT = 10,
-- 是否使用DISTINCT
@UseDistinct BIT = 0,
-- 处理动作
-- 0表示返回查询结果和总数,1表示只返回查询结果,2表示只返回总数
@Action TINYINT = 0,
-- 记录总数
@TotalCount BIGINT OUTPUT
)
AS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- **************************
-- 未做输入参数检查
-- ************************** DECLARE @sql NVARCHAR(MAX)
DECLARE @Distinct NVARCHAR(50) IF @Fields = ''
SET @Fields = '*'
SET @Order = ' ORDER BY ' + @Order
IF @Where <> ''
SET @Where = ' WHERE ' + @Where
SET @TotalCount = 0
IF @UseDistinct = 1
SET @Distinct = ' DISTINCT '
ELSE
SET @Distinct = '' IF @Action <> 2
BEGIN
-- Get Paging Data
IF @PageIndex = 1
SET @sql = 'SELECT ' + @Distinct + ' TOP ' + STR(@PageSize) + ' ' + @Fields + ',0 AS RowNumber FROM ' + @Table + ' ' + @Where + ' ' + @Order
ELSE
BEGIN
DECLARE @BeginRowNumber INT
SET @BeginRowNumber = (@PageIndex - 1) * @PageSize + 1
DECLARE @EndRowNumber INT
SET @EndRowNumber = @PageIndex * @PageSize SET @sql = 'SELECT ' + @Fields + ' FROM (SELECT ' + @Fields + ',ROW_NUMBER() OVER(' + @Order + ') AS RowNumber FROM ' IF @UseDistinct = 1
SET @sql = @sql + '(SELECT DISTINCT ' + @Fields + ' FROM ' + @Table + ' ' + @Where + ') AS S'
ELSE
SET @sql = @sql + @Table + ' ' + @Where SET @sql = @sql + ') AS T WHERE RowNumber BETWEEN ' + STR(@BeginRowNumber)+' AND ' + STR(@EndRowNumber) + ' ORDER BY RowNumber'
END
--print @sql
EXEC SP_EXECUTESQL @sql
END IF @Action <>1
BEGIN
-- Get TotalCount
SET @sql = 'SELECT @TotalCount=COUNT(1) FROM (SELECT ' + @Distinct + ' ' +@Fields+ ' FROM '+ @Table + ' ' + @Where +') AS temptable'
--print @sql
EXEC SP_EXECUTESQL @sql, N'@TotalCount INT OUTPUT', @TotalCount OUTPUT
END SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

支持DISTINCT的通用分页存储过程(SQL2005)的更多相关文章

  1. SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)

    SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...

  2. SQL Server的通用分页存储过程 未使用游标,速度更快!

    经过一个下午的时间,和我一个同事(绝对是高手)的共同努力下,摸索出了以下的思路: 1.确定存储的输入参数: 1)SQL脚本,该参数接收完整的.正确的SQL检索文本,可将原应用中写好的SQL脚本直接传入 ...

  3. SQL Server 2008 通用分页存储过程

    1.alert USE [数据库名称] GO /****** Object: StoredProcedure [dbo].[dbTab_PagerHelper] Script Date: 08/22/ ...

  4. MySql通用分页存储过程

    MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...

  5. Oracle通用分页存储过程的创建与使用

    Oracle通用分页存储过程的创建与使用 1.创建Oracle包的定义.使用 REF CURSOR 数据类型来处理 Oracle 结果集.REF CURSOR 是一个指向 PL/SQL 查询所返回的结 ...

  6. mysql通用分页存储过程遇到的问题(转载)

    mysql通用分页存储过程遇到的问题(转载) http://www.cnblogs.com/daoxuebao/archive/2015/02/09/4281980.html

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

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

  8. sqlserver 通用分页存储过程

    来源:http://www.jb51.net/article/19936.htm CREATE PROCEDURE commonPagination ), --要显示的列名,用逗号隔开 ), --要查 ...

  9. SQL SERVER 通用分页存储过程,两种用法任你选

    写在前面 从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和 ...

随机推荐

  1. 《Prism 5.0源码走读》UnityBootstrapper

    UnityBootstrapper (abstract class)继承自Bootstrapper(abstract)类, 在Prism.UnityExtensions.Desktop project ...

  2. 说说oracle中的面向对象与面向集合

    这一篇算是对近期自己学习的一个心得总结 一.oracle的面向对象 SQL是面向集合的这个大家都知道,但是不可否认现在的oracle中有很多地方都体现着面向对象的思维.(这也算是各大语言殊途同归的一个 ...

  3. android开发系列之gradle认识

    后面的系列博客,我将会写一写自己这段时间对于android的学习.认识.体会,希望能够与大家分享. 相信大家从ADT开发切换到android studio最大.最直观的变化就是gradle,因为在an ...

  4. iOS进阶学习-数据库

    一.数据库管理系统 1.SQL语言概述:SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 2.常见 ...

  5. iOS学习之视图控制器

    一.自定义视图(label-textField组合视图)      1.自定义视图:系统标准UI之外,自己组合出的新的视图.      2.优点:iOS提供了很多UI组件,借助它们我们可以实现不同的功 ...

  6. 51.ISE中的DCM全局时钟转为普通IO

    在用DCM这个IP核时,它的输入时钟为全局时钟引脚输入,输出有两种情况,第一,可以直接接在全局时钟引脚:第二,可以通过ODDR2原语接在普通IO引脚:说下第二种是怎么用的: DCM DCM_INST ...

  7. 基于word制作网站webhelp

    处理问题描述:现在我有个javaweb项目,需要在portal上面点击help即可打开: 当前搜索百度(谷歌不能用了),没有找到更好的解决方案,自己想了个比较简单实用的方法,仅供参考: 设计原理:利用 ...

  8. OpenFramework中视频或者图片进行中心旋转、平移、放大、缩小、矫正(本例以视频为准,只给出主要代码)

    /********** update mesh部分***********/ for(int i=0;i<4;i++) {  mesh[i].clear(); //重要,不加的话,移动视频的四个角 ...

  9. sourceInsight使用技巧,持续更新中~~~

    作为测试人员,读各种平台的工程代码时,根本不想安装各种vs或者eclipse等,于是,就找了一款代码阅读工具. sourceInsight,下载地址为官网:http://www.sourceinsig ...

  10. 1564: [NOI2009]二叉查找树 - BZOJ

    Description Input Output只有一个数字,即你所能得到的整棵树的访问代价与额外修改代价之和的最小值.Sample Input4 101 2 3 41 2 3 41 2 3 4Sam ...