老问题,存储过程分页

ycc2008 2005-01-05 05:16:53
我用下面的存储过程分页,但是要查询几个表,我该怎么做呢,比如:
select A.aid,A.aname,B.bid,B.bname from A INNER JOIN B ON A.aid=B.bid ORDER BY A.aid
谢谢
我用的下面的存储过程:

CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

if @OrderType != 0
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder

if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where " + @strWhere

set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end

if @IsCount != 0
set @strSQL = "select count(*) as Total from [" + @tblName + "]"

exec (@strSQL)

GO
...全文
226 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjbr 2005-01-07
  • 打赏
  • 举报
回复
up
ycc2008 2005-01-07
  • 打赏
  • 举报
回复
是用的存储过程呀,要分页的。。
tengjian1981 2005-01-06
  • 打赏
  • 举报
回复
up
goody9807 2005-01-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/goody9807/archive/2004/12/03/203670.aspx
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
但是我是用那个存储过程来实现呀
wangrenda 2005-01-06
  • 打赏
  • 举报
回复
哪你就用select a.*,b.* from a,b where a.id=b.id .......
BossFriday 2005-01-06
  • 打赏
  • 举报
回复
:(
greystar 2005-01-06
  • 打赏
  • 举报
回复
直接用SQL语句来实现

/*
使用SQL语句来进行分页
使用此技术的第一步是将所需页的数量与页大小相乘,然后将结果使用TOP关键字升序排序,再将此查询嵌入另一个查询中.
此查询是取页尺寸的大小的记录数。是降序处理
这样此查询是返回嵌入查询的最后一页。如果需要,可以将最终查询结果再进行升序处理
*/

declare @pagesize int --每页显示的记录数
declare @Pages int --要显示的页数
set @pagesize=3
set @pages=2
declare @Sql nvarchar(200)
set @sql='select top ' +str(@pagesize)+' * from(select top '+str( @pagesize*@pages)
+' * from dbo.Employees order by employeeid asc) as t order by employeeid desc'
exec(@sql)

ilovethisweb 2005-01-06
  • 打赏
  • 举报
回复
up
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
楼主,可以考虑建个视图。
可以解决你的问题。
然后从视图里查询(也就相当于一个表了)。
-------------------
用视图做好结构
-------------------------
那这样的话就没有主键,索引什么的了
  • 打赏
  • 举报
回复
关注一下。
ycc2008 2005-01-06
  • 打赏
  • 举报
回复
up
wangrenda 2005-01-05
  • 打赏
  • 举报
回复
用视图做好结构,
自然框架 2005-01-05
  • 打赏
  • 举报
回复
直接传就行了呀

这是字段 A.aid,A.aname,B.bid,B.bname
这是表名 A INNER JOIN B ON A.aid=B.bid
这是排序字段 A.aid
coley 2005-01-05
  • 打赏
  • 举报
回复
BS楼上回帖的,不尊重别人的劳动
owenbeckham 2005-01-05
  • 打赏
  • 举报
回复
楼主,可以考虑建个视图。
可以解决你的问题。
然后从视图里查询(也就相当于一个表了)。
……
slhuang 2005-01-05
  • 打赏
  • 举报
回复
楼主,可以考虑建个视图。
可以解决你的问题。
然后从视图里查询(也就相当于一个表了)。
……

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧