SQL分页查询存储过程代码分享

话不多说,请看代码

-------------------------------------
-----作者:张欣宇
-----时间:2013-06-28
-----简介:根据参数和条件分页查询
-------------------------------------
Create proc [dbo].[Up_PagingQueryByParameter]
(
 ----- 表名或能查询到结果的SQL语句{SQL语句左右必须有括号例:(select * from tbl1)}
 @TableName varchar(max),
 ----- 要查询的列名语句; 可空默认*
 @ColumnName varchar(5000),
 ----- 用来排序的列; 不可为空
 @OrderByColumnName varchar(50),
 ----- 排序desc(倒序5.4.3.2.1)或asc(正序1.2.3.4.5); 可空默认asc
 @ShrtBy varchar(4),
 ----- Where条件; 可空默认1=1
 @Where varchar(5000),
 ----- 每页显示数; 可空默认20
 @PageShows int,
 ----- 当前页数; 可空默认1
 @CurrentPage int,
 ----- 0为分页查询;其他为查询全部; 可空默认0
 @IsPaging int
)
as
begin
 ----- 参数检查及规范
 if isnull(@Where,N'')=N'' set @Where = N'1=1';
 if isnull(@ColumnName,N'')=N'' set @ColumnName = N'*';
 if isnull(@PageShows,0)<1 set @PageShows = 20;
 if isnull(@CurrentPage,0)<1 set @CurrentPage = 1;
 if isnull(@ShrtBy,N'')=N'' set @ShrtBy = 'asc';
 if isnull(@IsPaging,0)<>1 set @IsPaging = 0;
 ----- 定义
 -- 拼接的SQL语句
 declare @SqlStr nvarchar(max);
 declare @SqlWithStr nvarchar(max);
 -- 开始条数
 declare @StartIndex int;
 -- 结束条数
 declare @EndIndex int;
 ----- 赋值
 set @StartIndex = (@CurrentPage-1)*@PageShows+1;
 print(@CurrentPage);
 print(@PageShows);
 print(@StartIndex);
 set @EndIndex = @CurrentPage*@PageShows;
 print(@EndIndex);
 set @OrderByColumnName=@OrderByColumnName+' '+@ShrtBy;
 ----- 分页查询
 set @SqlWithStr = N'with temp as(select ROW_NUMBER() over(order by '+@OrderByColumnName+N') as RowNumber,'+@ColumnName+N' from '+@TableName+N' as tableName where '+@Where+N')';
 if(@IsPaging = 0)
 begin
 set @SqlStr = @SqlWithStr + N' select '+@ColumnName+N' from temp where temp.RowNumber between '+convert(nvarchar(20),@StartIndex)+N' and '+convert(nvarchar(20),@EndIndex)+N'';
 ---- print(@SqlStr);
 exec(@SqlStr);
 ----- 总数查询
 set @SqlStr = @SqlWithStr + N' select count(*) as TotalNumber from temp';
 ---- print(@SqlStr);
 exec(@SqlStr);
 end
 else
 begin
 set @SqlStr = @SqlWithStr + N' select '+@ColumnName+N' from temp';
 ---- print(@SqlStr);
 exec(@SqlStr);
 end
end

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • SQL Server 2005通用分页存储过程及多表联接应用

    这是不久前写的一个分页存储过程,可应用于SQL Server 2005上面: 复制代码 代码如下: if object_ID('[proc_SelectForPager]') is not null Drop Procedure [proc_SelectForPager] Go Create Proc proc_SelectForPager ( @Sql varchar(max) , @Order varchar(4000) , @CurrentPage int , @PageSize int,

  • SQL Server 分页查询通用存储过程(只做分页查询用)

    自开始做项目以来,一直在用.这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用. /*---------------------------------------------- *procedure name : P_PageResult * author :Fay * create date : 2014-07-18 */ CREATE PROCEDURE prcPageResult -- 获得某一

  • sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享

    最近发现现有框架的通用查询存储过程的性能慢,于是仔细研究了下代码: 复制代码 代码如下: Alter PROCEDURE [dbo].[AreaSelect]    @PageSize int=0,    @CurrentPage int=1,    @Identifier int=NULL,    @ParentId int=NULL,    @AreaLevel int=NULL,    @Children int=NULL,    @AreaName nvarchar(50)=NULL, 

  • SQL通用存储过程分页,支持多表联合

    SQLPager存储过程 复制代码 代码如下: ALTER proc [dbo].[SqlPager] ( @tblName varchar(255), -- 表名(注意:可以多表链接) @strGetFields varchar(1000) = '*', -- 需要返回的列 @OrderfldName varchar(255)='', -- 排序的字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @doCount int = 1

  • 基于Sql Server通用分页存储过程的解决方法

    sql server2000分页方式很多,效率吗  当到达10万级以上就有些吃力了,这里暂时不例出来了 sql server2005以上就有了row_number 也是一大进步,详情如下参考 复制代码 代码如下: Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList](@TableName nvarchar(100), --表名@ColumnNames nvarchar(1000) = '*', --字段名集合(全部

  • MSSQL MySQL 数据库分页(存储过程)

    先看看单条 SQL 语句的分页 SQL 吧. 方法1: 适用于 SQL Server 2000/2005 复制代码 代码如下: SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) ORDER BY id 方法2: 适用于 SQL Server 2000/2005 复制代码 代码如下: SELECT TOP 页大小 * FROM table1 WHERE

  • mssql 高效的分页存储过程分享

    最近在做一个几百万条数据的分页查询,研究了各种方案,在本机上用项目的实际数据库做测试,测试过程 is very 痛苦,不堪回首ing.现在废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看的方式. 以下是存储过程的代码: 复制代码 代码如下: CREATE PROCEDURE [dbo].[P_GridViewPager] (     @recordTotal INT OUTPUT,            --输出记录总数     @viewName VARCHAR(800),    

  • 深入sql server 2005 万能分页存储过程的详解

    –建立主表临时表CREATE TABLE #temp(rownumber bigint,orderseqno VARCHAR(36),goodsname VARCHAR(50),companyname VARCHAR(100))–建立子表临 时表CREATE TABLE #detail(orderseqno VARCHAR(36),detailid UNIQUEIDENTIFIER,unitprice DECIMAL(12,2),Qty int)–插入主表数据到主表临时表insert into

  • 三种SQL分页查询的存储过程代码

    复制代码 代码如下: --根据MAX(MIN)ID CREATE PROC [dbo].[proc_select_id] @pageindex int=1,--当前页数 @pagesize int=10,--每页大小 @tablename VARCHAR(50)='',--表名 @fields VARCHAR(1000)='',--查询的字段集合 @keyid VARCHAR(50)='',--主键 @condition NVARCHAR(1000)='',--查询条件 @orderstr VA

  • 五种SQL Server分页存储过程的方法及性能比较

    在SQL Server数据库操作中,我们常常会用到存储过程对实现对查询的数据的分页处理,以方便浏览者的浏览.本文我们总结了五种SQL Server分页存储过程的方法,并对其性能进行了比较,接下来就让我们来一起了解一下这一过程. 创建数据库data_Test : create database data_Test GO use data_Test GO create table tb_TestTable --创建表 ( id int identity(1,1) primary key, userN

随机推荐