sql2005分页

摘要:
ALTER程序[dbo]。[Pager2005]@TableNamevarchar,--table-name@Fieldsvarchar='*',--field-name@OrderFieldvarchar,--排序字段(必填!

ALTER Procedure [dbo].[Pager2005]
@TableName varchar(1000), --表名
@Fields varchar(5000) = '*', --字段名(全部字段为*)
@OrderField varchar(5000), --排序字段(必须!支持多字段)
@sqlWhere varchar(8000) = Null,--条件语句(不用加where)
@pageSize int, --每页多少条记录
@pageIndex int = 1 , --指定当前为第几页
@isCount bit,
@TotalPage int output, --返回总页数
@totalRecord int output --总记录数
as
begin

Begin Tran --开始事务

Declare @sql nvarchar(4000);
--Declare @totalRecord int output;

if(@isCount =1)
begin
--计算总记录数

if (@SqlWhere='' or @sqlWhere=NULL)
set @sql = 'select @totalRecord = count(*) from ' + @TableName
else
set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere

EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数

--计算总页数
select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
end

if (@SqlWhere='' or @sqlWhere=NULL)
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName
else
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere


--处理页数超出范围情况
if @PageIndex<=0
Set @pageIndex = 1

if @pageIndex>@TotalPage
Set @pageIndex = @TotalPage

--处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int

set @StartRecord = (@pageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @pageSize - 1

--继续合成sql语句
set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)

Exec(@Sql)
---------------------------------------------------
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @totalRecord ---返回记录总数
End
end

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

上篇UVM基础之---------uvm report 机制分析6.深入k8s:守护进程DaemonSet下篇

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

相关文章

Oracle字段

pl/sql查看当前数据库编码语句:select userenv('language') from dual; 测试结果:数据库字符集编码是utf-8 1、nvarchar2(size) ,size不能大于2000;而varchar2(size),size不能大于4000 2、nvarchar2(size)存size个汉字、英文等;varchar2(si...

Oracle --&amp;gt; Vertica 数据类型转换规则

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

MySQL通过自定义函数以及存储过程实现递归查询父级ID

1.存储过程定义  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译 2.为什么用存储过程实现树结构数据查询父级节点  1、能完成较复杂的运算与判断    2、可编程行强,灵活    3、SQL编程的代码可重复使用    4、预编译机制    5、减少...

SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

1.创建表 Staff CREATE TABLE [dbo].[Staff]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](50) NULL, [Sex] [varchar](50) NULL, [Department] [varchar](50) NULL,...

mybatis 注解形式设置批量新增、批量更新数据

1. 批量更新: @Update({"<script>" + "<foreach collection="smsConfigTemplateList" item="item" separator=";">" + " UPDATE" + " mt_m...

数据库中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指小数位,如果...