当前位置: 代码迷 >> Sql Server >> 求sql2000分页储存语句,要求不是按ID(主键)来排序,而是按其他多列排序,并有允许列有重复值
  详细解决方案

求sql2000分页储存语句,要求不是按ID(主键)来排序,而是按其他多列排序,并有允许列有重复值

热度:359   发布时间:2016-04-25 01:05:07.0
求sql2000分页存储语句,要求不是按ID(主键)来排序,而是按其他多列排序,并有允许列有重复值
求sql2000分页存储语句,要求不是按ID(主键)来排序,而是按其他多列排序,并有允许列有重复值
比如:表中列名 id(主键)  title   money1  money2 要求按money1 desc,money2 desc,排序,其中当money1值相同时,按money2排。asp网站
网上找到几个分页排序好象都是要求列中只有唯一值才可以,当money1值相同时,分页出错,无法显示。

------最佳解决方案--------------------
用临时表.
传入页数@page,以每页30条为例.
select i=identity(int,1,1),id,title,money1,money2 into # from tb order by money1 desc,money2 desc
select top 30 * from # where i>@page*30 order by i
------其他解决方案--------------------
修正:
用临时表.
传入页数@page,以每页30条为例.
select i=identity(int,1,1),id,title,money1,money2 into # from tb order by money1 desc,money2 desc
select top 30 * from # where i>(@page-1)*30 order by i 
------其他解决方案--------------------
我要求的是大量存储,200W条数据以上
------其他解决方案--------------------
不用ID列排序,就必须对全表进行处理,否则无法获得序列.而无论是2000或是以上版本,全表处理时用临时表总是速度最快的.
如果一定要不处理所有数据,则,另外创建一个表,这个表中存放着用money1,money2排序后的ID列值,且有一个序号列.每插入一行数据,就要重新整理一次这个表,如果你的表不是经常插入数据,则用这种方式比较好,相当于自己增加一个表外的聚集索引.
------其他解决方案--------------------
谢谢楼上,我对sql2000存储过程不是很熟,能不能写个象其它分页程序的存储过程,让我在sql2000中建个存储过程,然后直接asp文件中引用一下,就象http://bbs.csdn.net/topics/390292915 那样。

------其他解决方案--------------------
把上面的语句组织一下吧.
create procedure getpage
@page int,  --当前页
@pagenum int --每页行数
as
begin
select i=identity(int,1,1),id,title,money1,money2 into # from tb order by money1 desc,money2 desc
select top (@pagenum) * from # where i>(@page-1)*@pagenuum order by 
end
------其他解决方案--------------------
谢谢,楼主真是好人,我原来的asp程序具体引用如下:楼主能不能写入完整的存储过程给我,我会表示谢意的。
dim totalPut   '总记录
   dim CurrentPage  '当前页次
   dim TotalPages   '总页数

if b<>"" then
strwhere=strwhere&"and bigclassid="&b&" "
end if

if s<>"" then
strwhere=strwhere&" and smallclassid ="&s&"  "


Dim DL_CMD
Set DL_CMD=Server.CreateObject("ADODB.Command")
With DL_CMD
.ActiveConnection=conn 
.CommandType = 4 
.CommandText="P_viewPage"
.Prepared = true              '要求将SQL命令先行编译


.Parameters.Append .CreateParameter("@TblName", 200, 1, 255, "maindata")'查询表设置
.Parameters.Append .CreateParameter("@StrGetFields", 200, 1, 1000, "*")'查询列设置
.Parameters.Append .CreateParameter("@FldName",200,1,255,"elite") '排序列设置
.Parameters.Append .CreateParameter("@FldName2",200,1,255,"groupid") '排序列设置
.Parameters.Append .CreateParameter("@FldName3",200,1,255,"timefororder") '排序列设置
.Parameters.Append .CreateParameter("@PageSize", 3, 1, 4, MaxPerPage)'每页条数
.Parameters.Append .CreateParameter("@PageIndex", 3, 1,4 , CurrentPage)'页码数
.Parameters.Append .CreateParameter("@doCount", 3, 1,4 , 1)'1返回记录数 0返回记录集
  相关解决方案