SQL 分页实现

摘要:
= 0BEGINSET@strOrder='orderby'+@fldName+'desc'--如果@OrderType不是0,则执行降序。这非常重要!ENDELSEBEGINSET@strOrder='orderby'+@fldName+'asc'ENDSET@TotalCountSql=N’select@Max_ID=来自“+@tblName;--”的count(*)总记录报表SET@SqlString=N'(selectrow_number()over('+@strOrder+')asrowId,'+@strGetFields+'from'+@tblName;--查询语句IF(@strWhere!

--通用分页

ALTER PROCEDURE [dbo].[Sys_Pagination_1]

@tblName VARCHAR(2000) , -- 表名

@strGetFields VARCHAR(1000) = '*' , -- 需要返回的列

@fldName VARCHAR(255) = '' , -- 排序的字段名

@PageSize INT = 10 , -- 页尺寸

@PageIndex INT = 1 , -- 页码

@OrderType BIT = 0 , -- 设置排序类型, 非 0 值则降序

@strWhere VARCHAR(2500) = '' -- 查询条件 (注意: 不要加 where)

AS

BEGIN

--处理开始点和结束点

DECLARE @strOrder VARCHAR(400) -- 排序类型

DECLARE @MaxCode NVARCHAR(100) --记录个数

DECLARE @StartRecord INT;

DECLARE @EndRecord INT;

DECLARE @TotalCountSql NVARCHAR(4000);

DECLARE @SqlString NVARCHAR(4000);

SET @StartRecord = ( @PageIndex - 1 ) * @PageSize + 1

SET @EndRecord = @StartRecord + @PageSize - 1

IF @OrderType != 0

BEGIN

SET @strOrder = ' order by ' + @fldName + ' desc'

--如果@OrderType不是0,就执行降序,这句很重要!

END

ELSE

BEGIN

SET @strOrder = ' order by ' + @fldName + ' asc'

END

SET @TotalCountSql = N'select @Max_ID = count(*) from ' + @tblName;--总记录数语句

SET @SqlString = N'(select row_number() over (' + @strOrder

+ ') as rowId,' + @strGetFields + ' from ' + @tblName;--查询语句

IF ( @strWhere ! = ''

OR @strWhere != NULL

)

BEGIN

SET @TotalCountSql = @TotalCountSql + ' where ' + @strWhere;

SET @SqlString = @SqlString + ' where ' + @strWhere;

END

--第一次执行得到

--IF(@TotalRecord is null)

-- BEGIN

EXEC sp_executesql @totalCountSql, N'@Max_ID varchar(100) output',

@MaxCode OUTPUT;--返回总记录数

PRINT @totalCountSql

-- END

----执行主语句

SET @SqlString = 'select ' + @strGetFields + ' from ' + @SqlString

+ ') as t where rowId between ' + LTRIM(STR(@StartRecord))

+ ' and ' + LTRIM(STR(@EndRecord));

EXEC(@SqlString)

PRINT @SqlString

RETURN @MaxCode

END

免责声明:文章转载自《SQL 分页实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇htaccess详解及.htaccess参数说明【Win32 API学习】RegisterWindowMessage小记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件

出处:http://www.cnblogs.com/lichenwei/p/4145696.html Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。 1、相关文件 关于Mybatis-Generator的下载可以到这...

利用AspNetPager分页

分页的方法很多,现在介绍利用AspNetPager进行分页 一、准备工作 1.首先需要到准备分页控件AspNetPager.dll,点击这里下载。 官方网址是:http://www.webdiyer.com/Controls/AspNetPager 2.利用存储过程进行分页 -- ======================================...

(2) 电商数据库表设计

一. 用户实体 1. 用户登录表(customer_login) CREATE TABLE `customer_login` ( `customer_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', `login_name` varchar(20) NOT NULL COMMENT '...

20141103--SQL主键,外键

设置主键: 右键表→设计,在需要的列上右键→设置主键 或者在创建表的时候,在想要作为索引的列后面加上 primary key 1 create table biao3 2 ( 3 [No.] int primary key,--设置主键,唯一的,不能为空,不能重复 4 name varchar(10), 5 sex varchar(10), 6 age...

Oracle --> Vertica 数据类型转换规则

需求:在Vertica数据库上建表,表结构来源于原Oracle数据库,故需要转换成Vertica数据库库表结构。   实际转换操作需要评估源库用到的所有数据类型和数据本身特性。 下面是总结的某场景下的替换规则,仅供参考。 1.时间类型: DATE   =>   TIMESTAMP   2.数字类型:NUMBER(   =>   NUMERIC...

数据库中varchar类型数据转换为numeric类型

numeric有好几种选择,有整形、小数型等等。都是用cast来实现 前提:A表的ID字段是VARCHAR类型 1.SELECT CAST(ID AS INTEGER) FROM A 2.SELECT CAST(ID AS INT) FROM A 2.SELECT CAST(ID AS DECIMAL(18,X)) FROM A --X指小数位,如果...