两款sql 分页存储过程代码

文章收藏了两款sql 分页存储过程代码,这二款存储过程是二款高效分页存储过程代码,如果你觉得自己写的语句不够,强的话,可以利用我们现成的高效分页存储过程实例代码。

create procedure pages
@tablenames varchar(200), --表名,可以是多个表,但不能用别名
@primarykey varchar(100), --主键,可以为空,但@order为空时该值不能为空
@fields varchar(800), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
@pagesize int, --每页记录数
@currentpage int, --当前页,0表示第1页
@filter varchar(200) = '', --条件,可以为空,不用填 where
@order varchar(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order by
as
begin
declare @toprow varchar(12)
declare @temppagesize varchar(12)
if(len(@order)>0)
begin
set @order=' order by '+@order
end
else
begin
set @order=''
end
if (len(@filter)<1)
begin
set @filter=' 1=1'
end
if(@currentpage-1<=0)
set @currentpage=0
set @toprow= rtrim(ltrim(str(@pagesize*(@currentpage-1))))
set @temppagesize= rtrim(ltrim(str(@pagesize)))
exec('
declare @temptable table(rownum int identity(1,1),gid varchar(12))'+'
declare @datatable table(gid varchar(12))'+'
declare @timer datetime'+'
set @timer = getdate() '+'
set nocount on '+'
insert into @temptable(gid) select '+@primarykey+' from '+@tablenames+' where '+@filter+@order+'
insert into @datatable(gid) select top '+@temppagesize+'gid from @temptable where rownum>'+@toprow+'
set rowcount '+@temppagesize+'

select '+@fields+' from '+@tablenames+' where '+@filter+' and '+@primarykey+' in (select gid from @datatable)'+@order+'
set rowcount 0'+'
print(datediff(millisecond, @timer, getdate()))')
print('insert into @temptable(gid) select '+@primarykey+' from '+@tablenames+' where '+@filter+@order)
print('select '+@fields+' from '+@tablenames+' where '+@filter+' and '+@primarykey+' in(select gid from @datatable) '+@order)
end
go

实例代码二

 

alter procedure [dbo].[common_procedure_selectwithpage]
@sql varchar(5000),
@currentpageno int,
@pagesize int,
@totalnum int output
as
set nocount on
declare @sqlcmd varchar(5000)
------------------------------------------ --查询数据
set @sqlcmd = 'select * from (' + @sql + ') a where rowindex between ' + convert(varchar,(@currentpageno-1) * @pagesize + 1) + ' and ' + convert(varchar,@currentpageno * @pagesize)
exec(@sqlcmd) print (@sqlcmd)
------------------------------------------ --求记录总数
if @totalnum = -1
begin
create table #temp1(num int)
insert into #temp1
exec('select count(*) from (' + @sql + ') a')
select @totalnum=(select * from #temp1)
drop table #temp1
end

用法很简单,但必须在传入的sql中使用row_number() over(...) as rowindex :
declare @sql varchar(5000)
declare @currentpageno int
declare @pagesize int
declare @totalnum int

set @currentpageno = 100
set @pagesize = 10
set @totalnum = -1
set @sql = ' select *, row_number() over (order by 排序字段) as rowindex from 表名 a with (nolock) '

exec [dbo].[common_procedure_selectwithpage] @sql,@currentpageno,@pagesize,@totalnum output

select @totalnum

时间: 2024-07-31 16:12:13

两款sql 分页存储过程代码的相关文章

sql 分页存储过程实现代码

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

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 o

公用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

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 

.NET分页存储过程代码及使用

最近需要做个论坛,其中用到了分页,如果把整表的数据都查询出来未免小题大做,而且还影响速度 ,所以百度了并私有化了一个分页存储过程,实现了调用. 好了,废话不多说,贴出代码: /**** 使用帮助 首先查询表总行数,再查询分页数据 查询行数传入参数:@doCount,@tblName 查询分页传入参数:@tblName,@PageSize,@PageIndex,@fldName *以上不带查询条件的查询 带条件的加参数:@strWhere *分页查询可以使用排序 参数:@OrderType ***

针对SQL 2000 的分页存储过程代码分享_MsSql

复制代码 代码如下: ---------------------------------------------------- --针对SQL 2000 的分页存储过程 --Time:2008-9-25 ---------------------------------------------------- ALTER PROCEDURE [dbo].[uoSp_RecordPager] --要分页显示的表名,可多表连查,但不能使用别名. --例:uo_Article LEFT JOIN uo_

针对SQL 2000 的分页存储过程代码分享

复制代码 代码如下: ---------------------------------------------------- --针对SQL 2000 的分页存储过程 --Time:2008-9-25 ---------------------------------------------------- ALTER PROCEDURE [dbo].[uoSp_RecordPager] --要分页显示的表名,可多表连查,但不能使用别名. --例:uo_Article LEFT JOIN uo_

二个sql分页存储过程实例代码

这个还觉得不错的一个存储过程  代码如下 复制代码 /****** 对象:  StoredProcedure [dbo].[P_viewPage]    脚本日期: 05/14/2012 08:49:34 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create PROC [dbo].[P_viewPage] -- Add the parameters for the stored procedure here @TableN

1&gt;通用分页存储过程代码及调用

Java代码   /*****************************************************  MySQL分页存储过程  吴剑 2009-07-02    *****************************************************/   DROP PROCEDURE IF EXISTS pr_pager;   CREATE PROCEDURE pr_pager(       IN     p_table_name        V