求一个练表查询的分页存储过程,带统计

lyfeixue 2008-07-03 12:30:19
如题:连表查询的分页存储过程,需要带统计的,和多字段排序,总页数,不会数据库视图
当然不推荐通用的那种,最好是效率高的
数据库SQL2005 SP2的,暂时数据量比较小,可能后期比较大,百万级的吧

希望大家能不吝赐教,谢谢,
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
新鲜鱼排 2008-07-04
  • 打赏
  • 举报
回复
DB.AddParameter("@Fields", "J.JobID AS JobID,C.CompanyName AS CompanyName");
zlp321002 2008-07-03
  • 打赏
  • 举报
回复
至于统计,看具体需求.如果横,纵,汇总都需要,最好选择专门的报表工具,如: Analyzer 2007 就不错.
可以参考下效果:
http://blog.csdn.net/zlp321002/archive/2008/03/24/2214532.aspx
zlp321002 2008-07-03
  • 打赏
  • 举报
回复
--SQL Server 2005 用这个还不错.

--例子应用(求某一个表第二页数据.每页显示20条记录)

declare @pagesize int
declare @pagenumber int
set @pagesize =20
set @pagenumber =2
Select * FROM (
select ROW_NUMBER()Over(order by cf_id desc) as rowId,* from T_Test
) as mytable
where rowId between @pagesize*(@pagenumber-1)+1 and @pagesize*@pagenumber
hery2002 2008-07-03
  • 打赏
  • 举报
回复
连表查询的分页存储过程,需要带统计的,和多字段排序,总页数,不会数据库视图
----------
不会数据库视图是什么意思?
是不能用视图还是LZ不会视图?
还要带统计.......
其它都好说,
如果带统计的话,估计有点麻烦了,使用子查询.
少几个统计栏位还好,多了更麻烦.
lyfeixue 2008-07-03
  • 打赏
  • 举报
回复
CREATE PROCEDURE Pg_Paging
@Tables varchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID
@PK varchar(100), --主键,可以带表头 a.AID
@Sort varchar(200) = '', --排序字段
@PageNumber int = 1, --开始页码
@PageSize int = 10, --页大小
@Fields varchar(1000) = '*',--读取字段
@Filter varchar(1000) = NULL,--Where条件
@Group varchar(1000) = NULL, --分组
@isCount bit = 0 --1 --是否获得总记录数
AS
BEGIN
DECLARE @strFilter varchar(2000)
declare @sql varchar(8000)
IF @Filter IS NOT NULL AND @Filter != ''
BEGIN
SET @strFilter = ' WHERE ' + @Filter + ' '
END
ELSE
BEGIN
SET @strFilter = ''
END

if @isCount = 1 --只获得记录条数
begin
set @sql = 'SELECT Count(*) FROM ' + @Tables + @strFilter
end
else
begin
if @Sort = ''
set @Sort = @PK + ' DESC '

IF @PageNumber < 1
SET @PageNumber = 1

if @PageNumber = 1 --第一页提高性能
begin
set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ ' from ' + @Tables + ' ' + @strFilter + ' ORDER BY '+ @Sort
end
else
begin
DECLARE @START_ID varchar(50)
DECLARE @END_ID varchar(50)
SET @START_ID = convert(varchar(50),(@PageNumber - 1) * @PageSize + 1)
SET @END_ID = convert(varchar(50),@PageNumber * @PageSize)
set @sql = ' SELECT '+@Fields+ '
FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum,
'+@Fields+ '
FROM '+@Tables+') AS D
WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort
END

END
EXEC(@sql)
END
GO













以上是在http://www.cnblogs.com/edobnet/archive/2008/01/23/1049985.html
找到的一个存储过程
但是有一点问题
Database DB = DatabaseManager.CreateDatabase("XdWebConn");
DB.AddParameter("@Tables", "Ly_Job J inner join Ly_Company C on J.ComID=C.ComID");
DB.AddParameter("@PK", "J.JobID");
DB.AddParameter("@Sort", "J.JobID Desc");
DB.AddParameter("@PageNumber", 2);
DB.AddParameter("@PageSize", 10);
DB.AddParameter("@Fields", "J.JobID,C.CompanyName");
DB.AddParameter("@Filter", "");
DB.AddParameter("@Group", "");
DB.AddParameter("@isCount", 0);
DataSet ds = DB.ExecuteDataSet("Ly_JoinTablePaging");
DataTable dt = ds.Tables[0];
Repeater1.DataSource = dt;
Repeater1.DataBind();

第一页显示没什么问题,<%# Eval("JobID")%> 这样的绑定要出错, J.JobID 也要出错,后面我在字段里面用了
J.JobID As JobID ,绑定成功了
但是第二页就不行了
无法绑定由多个部分组成的标识符 "J.JobID"。
无法绑定由多个部分组成的标识符 "C.CompanyName"。
无法绑定由多个部分组成的标识符 "J.JobID"。

出现这样的错误,高手来帮忙解决一下吧
lyfeixue 2008-07-03
  • 打赏
  • 举报
回复
主要应用于 网站方面哈
utpcb 2008-07-03
  • 打赏
  • 举报
回复
declare @pagesize int
declare @pagenumber int
set @pagesize =20
set @pagenumber =2
Select * FROM (
select ROW_NUMBER()Over(order by cf_id desc) as rowId,* from T_Test
) as mytable
where rowId between @pagesize*(@pagenumber-1)+1 and @pagesize*@pagenumber
lyfeixue 2008-07-03
  • 打赏
  • 举报
回复
回 苦*行*僧

是我不会视图,稍等下调试 zlp321002

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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