SQL分页查询存储过程实例代码

话不多说,请看代码

-------------------------------------

-----作者:张欣宇

-----时间:2013-06-28

-----简介:根据参数和条件分页查询

-------------------------------------

Createproc [dbo].[Up_PagingQueryByParameter]

(

 ----- 表名或能查询到结果的SQL语句{SQL语句左右必须有括号例:(select * from tbl1)}

 @TableNamevarchar(max),

 ----- 要查询的列名语句; 可空默认*

 @ColumnNamevarchar(5000),

 ----- 用来排序的列; 不可为空

 @OrderByColumnNamevarchar(50),

 ----- 排序desc(倒序5.4.3.2.1)或asc(正序1.2.3.4.5); 可空默认asc

 @ShrtByvarchar(4),

 ----- Where条件; 可空默认1=1

 @Wherevarchar(5000),

 ----- 每页显示数; 可空默认20

 @PageShowsint,

 ----- 当前页数; 可空默认1

 @CurrentPageint,

 ----- 0为分页查询;其他为查询全部; 可空默认0

 @IsPagingint

)

as

begin

 ----- 参数检查及规范

 ifisnull(@Where,N'')=N''set@Where= N'1=1';

 ifisnull(@ColumnName,N'')=N''set@ColumnName = N'*';

 ifisnull(@PageShows,0)<1set@PageShows = 20;

 ifisnull(@CurrentPage,0)<1set@CurrentPage = 1;

 ifisnull(@ShrtBy,N'')=N''set@ShrtBy ='asc';

 ifisnull(@IsPaging,0)<>1set@IsPaging = 0;

 ----- 定义

 -- 拼接的SQL语句

 declare@SqlStr nvarchar(max);

 declare@SqlWithStr nvarchar(max);

 -- 开始条数

 declare@StartIndexint;

 -- 结束条数

 declare@EndIndexint;

 ----- 赋值

 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

时间: 2024-10-23 20:03:20

SQL分页查询存储过程实例代码的相关文章

实现SQL分页的存储过程代码_MsSql

SQL分页的存储过程代码,需要的朋友们直接拿去用,使用非常简单. 分享代码如下 USE [SendMessage] GO /****** Object: StoredProcedure [dbo].[pages] Script Date: 07/09/2015 13:46:50 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROC [dbo].[pages] ( @tbname nvarchar(100), --要

SQL Server 2012 多表连接查询功能实例代码

废话不多说了,直接给大家贴代码了,具体代码如下所示: -- 交叉连接产生笛卡尔值 (X*Y) SELECT * FROM Student cross Join dbo.ClassInfo --另外一种写法 SELECT * FROM Student , ClassInfo -- 内连接 (Inner 可以省略) SELECT * FROM Student JOIN dbo.ClassInfo ON dbo.Student.Class = dbo.ClassInfo.ID; -- Inner Jo

sql分页查询几种写法_MsSql

关于SQL语句分页,网上也有很多,我贴一部分过来,并且总结自己已知的分页到下面,方便日后查阅 1.创建测试环境,(插入100万条数据大概耗时5分钟). create database DBTest use DBTest --创建测试表 create table pagetest ( id int identity(1,1) not null, col01 int null, col02 nvarchar(50) null, col03 datetime null ) --1万记录集 declar

sql分页查询几种写法

关于SQL语句分页,网上也有很多,我贴一部分过来,并且总结自己已知的分页到下面,方便日后查阅 1.创建测试环境,(插入100万条数据大概耗时5分钟). create database DBTest use DBTest --创建测试表 create table pagetest ( id int identity(1,1) not null, col01 int null, col02 nvarchar(50) null, col03 datetime null ) --1万记录集 declar

php分页函数完整实例代码_php技巧

本文分享一例php分页函数完整实例代码,使用此函数实现分页效果很不错.分享给大家供大家参考. 具体功能代码如下: <?php /* * Created on 2011-07-28 * 使用方法: require_once('mypage.php'); $result=mysql_query("select * from mytable", $myconn); $total=mysql_num_rows($result); //取得信息总数 pageDivide($total,10

SQL分页查询方式汇总_MsSql

需求:查询表dbo.Message,每页10条,查询第2页 1:TOP() SELECT TOP(20) * FROM dbo.Message WHERE Code NOT IN (SELECT TOP(10) Code FROM dbo.Message) 2:BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum SELECT *,ROW_NUMBER() OVER(ORDER BY Code) AS rowNum INTO #a F

SQL分页查询方式汇总

需求:查询表dbo.Message,每页10条,查询第2页 1:TOP() SELECT TOP(20) * FROM dbo.Message WHERE Code NOT IN (SELECT TOP(10) Code FROM dbo.Message) 2:BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum SELECT *,ROW_NUMBER() OVER(ORDER BY Code) AS rowNum INTO #a F

SQL分页查询代码

SQL Server 关于分页 SQL 的资料许多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是颠末预编译的,执行效率高,也更灵活.先看看单条 SQL 语句的分页 SQL 吧. 方法1: 适用于 SQL Server 2000/2005 SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id

oracle,mysql,SqlServer三种数据库的分页查询的实例_MsSql

MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE - LIMIT 10; #返回前10行select * from table WHERE - LIMIT 0,10; #返回前