| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12078 人关注过本帖, 5 人收藏
标题:存储过程自定义分页详解
只看楼主 加入收藏
chenyou0403
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-9-9
收藏
得分:0 
又问题多多讨论
我是新手,  呵呵呵 希望以后各位大虾多多帮忙.....
2008-09-09 12:57
fisherdong2001
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-9-20
收藏
得分:0 
where那块有问题
我在VS2005下使用了楼主的存储过程,where那块有问题,我改成如下形式:
set nocount off--打开计数
if @SelectWhere != ''
begin
set @TmpSelect ='select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+
@TableName+' where '+
@SelectWhere+' '+@SelectOrder+')'+'
and '+@SelectWhere+' '+@SelectOrder
end
else
begin
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' '+@SelectOrder+') '+@SelectOrder
end
execute sp_executesql @TmpSelect
return(@@rowcount)
GO

在单步调试时却总是提示@SelectWhere,比如@SelectWhere=“IsAdmin=1”的‘=’附近有语法错误,但是却搜索出了正确结果(程序不能通过),请问楼主这是
怎么回事?
2008-09-20 02:51
初学Delphi
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:330
专家分:0
注 册:2006-4-4
收藏
得分:0 
楼主这种乐于助人的风格值得我们很好学习,凌晨了还给大家找代码。
但事这个存储过程绝对的有问题,我一开始来公司用的就是这个,后来再使用过程中发现问题。
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' '+@SelectWhere +' '+@SelectOrder+') and '+@SelectWhere +' '+@SelectOrder
这句@SelectOrderId 如果不是主键会出现什么情况?
我们写语句 求表的M到N列  一般写select top N-M * from Tablename where Columns1 not in (select top M Columns1 from Tablename)
这样写必须保证Columns事主键,要不就没意义了,说的极端一点,假如说Columns1在这个表里就一个值,但表有1000行,这样写的结果是空。
  而且执行速度也不行,用Sql自带的分页的存储过程  速度很快。



哈哈  很不好意思 补充一点:我没注意定义的时候楼主写的@SelectOrderId是主键,但我觉得  你这样限制这个分页存储过程就没什么意义了,因为出来一张表(指的@TableName),主键只能是一个字段,对一个字段排序好像用户使用起来……满足不了用户使用。

[[it] 本帖最后由 初学Delphi 于 2008-9-20 09:31 编辑 [/it]]
2008-09-20 09:19
panxuguang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-28
收藏
得分:0 
过来看看
2009-09-18 09:03
panxuguang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-28
收藏
得分:0 
--楼主的存储过程有问题
 --我现在帮你改了下,应该没问题了
  --楼主原来是少了两个where
--set @TmpSelect = 'select @RecordCount = count(*) from '+@TableName+' where '+@SelectWhere +''
--select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' where '+@SelectWhere +' '+@SelectOrder+'



alter proc Proc_getPager
@TableList Varchar(200)='*',--搜索表的字段,比如:’id,datatime,job‘,用逗号隔开
@TableName Varchar(30), --搜索的表名
@SelectWhere Varchar(500)='',--搜索条件,这里不用写where,
@SelectOrderId Varchar(30),--表主键字段名。比如:id
@SelectOrder Varchar(200)='', --排序,可以使用多字段排序但主键字段必需在最前面.也可以不写,比如:order by class asc
@intPageNo int=1, --页号
@intPageSize int=10 ,--每页显示数
@RecordCount int OUTPUT  --总记录数(存储过程输出参数)
as  
   
declare @TmpSelect      NVarchar(600)  
declare @Tmp     NVarchar(600)  

set nocount on--关闭计数

set @TmpSelect = 'select @RecordCount = count(*) from '+@TableName+' where '+@SelectWhere +''

execute sp_executesql
@TmpSelect,    --执行上面的sql语句
N'@RecordCount int OUTPUT' ,   --执行输出数据的sql语句,output出总记录数
@RecordCount  OUTPUT

  if (@RecordCount = 0)    --如果没有贴子,则返回零
       return 0
      
   /*判断页数是否正确*/
  if (@intPageNo - 1) * @intPageSize > @RecordCount   --页号大于总页数,返回错误
     return (-1)
set nocount off--打开计数
if @SelectWhere != ''
begin
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' where '+@SelectWhere +' '+@SelectOrder+') and '+@SelectWhere +''+@SelectOrder
end
else
begin
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' '+@SelectOrder+') '+@SelectOrder
end
execute sp_executesql @TmpSelect
return(@@rowcount)
GO

不过不知道楼主如果有多张表的话,能不能实现?

[ 本帖最后由 panxuguang 于 2009-9-18 10:41 编辑 ]
2009-09-18 10:34
a87957739
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-19
收藏
得分:0 
    谢谢``   收获胜多!~~
2009-09-19 15:05
haizeng
Rank: 2
来 自:xdpsj.com
等 级:等待验证会员
帖 子:61
专家分:36
注 册:2009-11-30
收藏
得分:0 
存储过程 很 重要啊!

[url=http://www./]石料生产线[/url]
[url=http://www.]破碎机[/url]
2009-12-21 10:02
云霆
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-11-18
收藏
得分:0 
我运行的是后怎么条件不能添加了???
2010-05-28 11:12
yw5415
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-4-25
收藏
得分:0 
我也是想加个classID=""的条件选择就不行了。。。
2010-06-10 10:47
suyongtao
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:33
帖 子:8674
专家分:127
注 册:2004-11-6
收藏
得分:0 
不错不错。。。。。。我喜欢!

面朝大海,春暖花开!
2011-03-25 12:03
快速回复:存储过程自定义分页详解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018989 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved