mssql server sql分页存储过程

一款很简单的sql分布存储过程代码,并且是一款通用分页sql哦 。

set quoted_identifier on
go
set ansi_nulls on
go

create proc execbypage

@sqlquery varchar(2000), --//输入参数:sql检索语句或表名
@pagesize int, --//输入参数:每页显示记录条数
@pageindex int --//输入参数:当前页码

as

set nocount on
set ansi_warnings off

declare @tmptablename varchar(50)
set @tmptablename = '##tb1516_' + replace(cast(newid() as varchar(40)),'-','') --//生成随机临时表名称

declare @subindex int
set @subindex = charindex('from',@sqlquery)
if (@subindex > 0)
begin --//带from的标准检索语句
declare @sqlquery1 varchar(2000)
declare @sqlquery2 varchar(2000)
set @sqlquery1 = substring(@sqlquery,1,@subindex - 1)
set @sqlquery2 = substring(@sqlquery,@subindex,len(@sqlquery))
set @sqlquery = @sqlquery1 + ',identity(numeric,1,1) as id1516 into ' + @tmptablename + ' ' + @sqlquery2
end
else --//不带from的表名
begin
set @sqlquery = 'select *,identity(numeric,1,1) as id1516 into ' + @tmptablename + ' from' + @sqlquery
end
exec(@sqlquery) --//建立并初始化临时表数据

declare @indexstart varchar(20),@indexend varchar(20)
set @indexstart = cast((@pageindex-1)*@pagesize+1 as varchar(20)) --//数据起始行id
set @indexend = cast(@pageindex * @pagesize as varchar(20)) --//数据结束行id

exec('select * from ' + @tmptablename + ' where id1516 between ' + @indexstart + ' and ' + @indexend) --//检索该页数据

exec('select max(id1516) as recordcount from ' + @tmptablename) --//提取总条数

exec('drop table ' + @tmptablename) --//删除临时表

go
set quoted_identifier off
go
set ansi_nulls on
go

1、确定存储的输入参数:
1)sql脚本,该参数接收完整的、正确的sql检索文本,可将原应用中写好的sql脚本直接传入
2)每页的数据容量,就是一页有多少条数据
3)当前页码
2、确定分页机制:
1)执行传入的sql脚本,并将结果生成临时表
2)修改临时表的结构,增加标识列字段
3)根据标识列字段,计算出指定页码内的记录范围,并返回
4)返回总数据条数,用于客户端进行分页显示

时间: 2024-10-22 00:25:25

mssql server sql分页存储过程的相关文章

几种高效mssql server sql分页语句

几种高效mssql server sql分页语句 分页方案三:(利用id大于多少和select top分页)效率最高,需要拼接sql语句 分页方案二:(利用not in和select top分页) 效率次之,需要拼接sql语句www.111cn.net 分页方案一:存储过程相对于大数据量会有明显的优势的  看一个简单存储过程实例的 create procedure pr_getarticles --这里为存储过程名称 @page int , @pagenum int as declare @ta

sql server 2005分页存储过程和sql server 2000分页存储过程

 sql server 2005分页存储过程和sql server 2000分页存储过程,sql 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持jion的,sql2000的分页存储过程,也可以运行在sql2005上,但是性能没有sql2005的版本好. USE [svnhost] GO /****** 对象:  StoredProcedure [dbo].[up_Page2005]    脚本日期: 05/21/2008 11:27:05 ******/ SE

sql 分页存储过程实现代码

sql 分页存储过程实现代码 create PROCEDURE Sp_Conn_Sort ( @tblName   varchar(255),       -- 表名 @strGetFields varchar(1000) = '*',  -- 需要返回的列 @fldName varchar(255)='',      -- 排序的字段名 @PageSize   int = 40,          -- 页尺寸 @PageIndex  int = 1,           -- 页码 @doC

asp.net中常用到的SQL分页存储过程

asp.net中常用到的SQL分页存储过程 以下是引用片段:create PROCEDURE [dbo].[myPage] @tblName varchar(255), -- 表名 @fldName varchar(255), -- 排序的字段名,一般为唯一标识 @strGetFields varchar(1000) = ' * ', -- 需要返回的列  @PageSize int = 10, -- 每页有多少条记录 @PageIndex int = 1, -- 第几页 @Count int 

两款sql 分页存储过程代码

文章收藏了两款sql 分页存储过程代码,这二款存储过程是二款高效分页存储过程代码,如果你觉得自己写的语句不够,强的话,可以利用我们现成的高效分页存储过程实例代码. create procedure pages @tablenames varchar(200), --表名,可以是多个表,但不能用别名 @primarykey varchar(100), --主键,可以为空,但@order为空时该值不能为空 @fields varchar(800), --要取出的字段,可以是多个表的字段,可以为空,为

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

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

经过优化测试的SQL分页存储过程

  建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的

公用ms sql 分页存储过程

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在编写分页存储过程前我们先为数据库创建一个测试表,这个测试表明叫做order,当中有3个字段,分别是or_id,orName,dateSta;下面创建表脚本: CREATE TABLE [dbo].[Orders](     [or_id] [int] IDENTITY(1,1) NOT NULL,     [orName] [nvarcha

sql分页存储过程可带分页查询条件

假设数据库中有张表,表名是UserName,字段分别是ID(int),Name(nvarchar),Age(int). 如果不带查询条件存储过程是:  代码如下 复制代码 CREATE PROCEDURE [dbo].[UserName]     @pageIndex int,     @pageSize int AS     declare @min int;     declare @max int;     set @min=@pageSize*(@pageIndex-1)+1;