支持DISTINCT的通用分页存储过程(SQL2005)
/****** 对象: 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)的更多相关文章
- SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)
SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...
- SQL Server的通用分页存储过程 未使用游标,速度更快!
经过一个下午的时间,和我一个同事(绝对是高手)的共同努力下,摸索出了以下的思路: 1.确定存储的输入参数: 1)SQL脚本,该参数接收完整的.正确的SQL检索文本,可将原应用中写好的SQL脚本直接传入 ...
- SQL Server 2008 通用分页存储过程
1.alert USE [数据库名称] GO /****** Object: StoredProcedure [dbo].[dbTab_PagerHelper] Script Date: 08/22/ ...
- MySql通用分页存储过程
MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...
- Oracle通用分页存储过程的创建与使用
Oracle通用分页存储过程的创建与使用 1.创建Oracle包的定义.使用 REF CURSOR 数据类型来处理 Oracle 结果集.REF CURSOR 是一个指向 PL/SQL 查询所返回的结 ...
- mysql通用分页存储过程遇到的问题(转载)
mysql通用分页存储过程遇到的问题(转载) http://www.cnblogs.com/daoxuebao/archive/2015/02/09/4281980.html
- Sql Server通用分页存储过程
Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList] ( @TableName nvarchar(100), --表名 ...
- sqlserver 通用分页存储过程
来源:http://www.jb51.net/article/19936.htm CREATE PROCEDURE commonPagination ), --要显示的列名,用逗号隔开 ), --要查 ...
- SQL SERVER 通用分页存储过程,两种用法任你选
写在前面 从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和 ...
随机推荐
- DeviceOne开发HelloWord
http://www.cnblogs.com/wjiaonianhua/p/5278061.html http://www.jb51.net/article/75693.htm 2015 年 9 月 ...
- Android--启动拍照功能并返回结果
因为没有深入学习拍照这块功能,所以只是简单的调用了一下系统的拍照功能,下面代码: //拍照的方法 private void openTakePhoto(){ /** * 在启动拍照之前最好先判断一下s ...
- 如何从官网下载springframework和document
spring官网 http://spring.io/ --->spring project--->点击github图标 --->artifactory --->进入到了http ...
- 人脸检测的API例子
package cliu.TutorialOnFaceDetect; /* * MyImageView.java * Download by http://www.codefans.net * [AU ...
- 嵌入式web服务
:boa.thttpd.mini_httpd.shttpd.lighttpd.goaheand.appweb和apache等. Boa 1.介绍 Boa诞生于1991年,作者Paul Philips. ...
- 上传图片的回调函数,callback作为一个函数针对回调函数
Tool.ImageUpload = function (selector, callback) { /// <summary>图片上传</summary> /// <p ...
- 初识MVC,MVC里面的基本数据传递
MVC是一种表现形式,他将Web应用程序分成三个组件即:视图(View)控制器(Controller)模型(Model). M:Model 主要是存储或者是处理数据的组件 V:View 是 ...
- java提高篇-----详解java的四舍五入与保留位
转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...
- 2.Modelsim打开时出现的Error
Modelsim之error “unable to check out a viewer license necessary for use of the modelsim graph.Vsim is ...
- C++变量的存储类别与作用域
总结一下C++中变量的存储类别以及变量的作用域. (1)标示符的存储类别决定了标示符在内存中存在的时间(我们可以理解标示符就是确定一个变量的符号,也就是我们所说的变量名) 二:存储类别 (1)静态存储 ...