求一个存储过程分页,只要求对一个表,有二个以上排序条件,不要用临时表方法

nbjed 2005-08-22 03:36:25
1.Tables :表名称,视图
2.PrimaryKey :主关键字
3.Sort :排序语句 比如:NewsID Desc,OrderRows Asc
4.CurrentPage :当前页码
5.PageSize :分页尺寸
6.Fields :字段值
7.Filter :过滤语句,不带Where
8.Group :Group语句,不带Group By

各位看清楚了,不是你们以前经常粘的那些分页,我看过了,现在这里的都不怎么好用
什么千万级的存储分页等都不好
只要求对一个表,有二个以上排序条件,不要用临时表方法!!!!
...全文
280 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yajunmao 2006-01-11
有时间看看
回复
收藏
回复
wdswcy 2005-12-22
收藏
回复
comboyone 2005-10-09
收藏
回复
rivery 2005-08-22
注意:多表使用,不支持 A inner join B on....
采用旧的语法:A a,B b where a.id=b.id
楼主试试看有什么问题。
回复
rivery 2005-08-22
--那给你一个动态sql语句的。
CREATE procedure select_pagesize( @select_list varchar(1000)='*',--不需要select
@table_name varchar(100),
@where varchar(1000)='',--不需要where
@primary_key varchar(100),--当是表联合时,加表名前缀.
@order_by varchar(200),--需要完整的子句 order by ...
@page_size smallint=20,--每页记录
@page_index int=1,--页索引
@do_count bit=0)--1只统计总数
as
/*
过程名:通用存储过程分页
使用示例:
单表sql调用:exec select_pagesize 'login_id,login_name','tb_login',' login_name like ''%%''','login_id',' order by login_dt desc',20,10
多表sql调用:exec select_pagesize 'a.login_id,a.login_name,b.pro_name','tb_login a,tb_code_province b',' a.pro_id=b.pro_id and a.login_name like ''%%''','a.login_id',' order by a.login_dt desc',20,10
备注:外部程序调用不需要转义单引号
原型结构:select top 20 select_list
from tablename
where z_id not in(select z_id from (select top 100 z_id from tablename order by order_by) temptable)
and ...
order by order_by

*/

declare @sql_str varchar(8000)
declare @record_min int
declare @new_where varchar(1000),@newin_where varchar(1000)
if @where=''--重新为梳理,此过程时性能的考虑,因此不使用 where 1=1 再追加条件。
begin
select @new_where=''
select @newin_where=''
end
else
begin
select @new_where=' and '+@where
select @newin_where=' where '+@where
end

if @do_count=1
select @sql_str='select count(*) from '+@table_name+@newin_where
else
if @page_index=1
if @where=''
select @sql_str='select top '+convert(varchar,@page_size)+ ' '+@select_list+' from '+@table_name+' '+@order_by
else
select @sql_str='select top '+convert(varchar,@page_size)+ ' '+@select_list+' from '+@table_name+' where '+@where+' '+@order_by
else
begin
select @record_min=(@page_index-1)*@page_size
select @sql_str='select top '+convert(varchar,@page_size)+' '+@select_list+' from '+@table_name+' where '+@primary_key+' not in (select '+stuff(@primary_key,1,charindex('.',@primary_key),'')
select @sql_str=@sql_str+' from (select top '+convert(varchar,@record_min)+' '+@primary_key+' from '+@table_name+@newin_where+' '+@order_by+') temptable0000)'
select @sql_str=@sql_str+@new_where+' '+@order_by
end
--print @sql_str
exec(@sql_str)
GO
回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2005-08-22 03:36
社区公告
暂无公告