调用分页存储过程 ,查询语句是按照时间排序的,但是由于有好多时间是一样的,
所以当我翻到其他页的时候,有好多数据都显示不出来,怎么避免呢???
所以当我翻到其他页的时候,有好多数据都显示不出来,怎么避免呢???
解决方案 »
- 关于模版标签应该怎么解释
- KindEditor 4.0.5的examples文件夹里有个image-dialog.html用于上传图片的,谁能告诉我怎么上传啊!怎么设置存储图片的地址。。
- GridView 未知问题 问题不好解决
- 一个DataGrid问题,请各位高手指较!!!
- 发现内容显示页较占资源,项目显示页挺占资源
- ★★★如何求一个数组相对于另一个数组的补集?★★★
- 在线等:DataGrid标题颜色的小问题;立即给分
- 提供ASP.NET 2.0 资料下载.
- asp.net遍历所有控件的问题,求解!
- vs2010能发布其中的一个文件吗?
- 事务回滚以后会自动从begin tran再执行吗?
- 网页采集
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[up_Page2005V2_Join]
@TableName nvarchar(200), -- 表名
@ReturnFields nvarchar(2000) = '*', -- 需要返回的列
@PageSize int = 10, -- 每页记录数
@PageIndex int = 1, -- 当前页码
@Where nvarchar(2000) = '', -- 查询条件
@Orderfld nvarchar(2000)='', -- 排序字段名 最好为唯一主键
@OrderType int = 1 -- 排序类型 1:降序 其它为升序
AS
BEGIN
Begin Tran --开始事务
Declare @TotalRecord int
Declare @TotalPage int
Declare @sql nvarchar(4000);
--计算总记录数
if (@Where='' or @Where=NULL)
set @sql = 'select @TotalRecord = count(*) from ' + @TableName
else
set @sql = 'select @TotalRecord = count(*) from ' + @TableName + ' where ' + @Where EXEC sp_executesql @sql,N'@TotalRecord int OUTPUT',@TotalRecord OUTPUT--计算总记录数
--计算总页数
select @TotalPage=CEILING((@TotalRecord+0.0)/@PageSize) if (@Where='' or @Where=NULL)
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @Orderfld + ') as rowId,' + @ReturnFields + ' from ' + @TableName
else
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @Orderfld + ') as rowId,' + @ReturnFields + ' from ' + @TableName + ' where ' + @Where
--处理页数超出范围情况
if @PageIndex<=0
Set @pageIndex = 1
if @pageIndex>@TotalPage
Set @pageIndex = @TotalPage --处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int
set @StartRecord = (@pageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @pageSize - 1 --继续合成sql语句
set @Sql = @Sql + ') as t where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)
print @sql Exec(@Sql)
SELECT @TotalRecord as RecordCount,@TotalPage as PageCount
---------------------------------------------------
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @TotalRecord ---返回记录总数
End
END
CREATE PROCEDURE sp_EC_get_Store
--@id int,
@pagesize int, --每页条数
@pageindex int, --页数
@docount bit, --是否进行统计
@condition varchar(800) --查询条件
AS
set nocount on if(@docount=1)
exec('SELECT count(*) FROM EC_Web_StoreInfo a where 1=1 '+@condition) else
begin
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
set @PageLowerBound=@PageLowerBound+1
exec('declare @indextable table(id int identity(1,1),nid int)
insert into @indextable(nid) select a.id from EC_Web_StoreInfo a where 1=1 '+@condition+' order by a.id desc SELECT a.id, a.name, a.info, a.notice, a.address, a.CID, a.commend, Convert(varchar(10),a.addDate,120) as addDate,
(select ClientName from web_Clients b where a.cid=b.ClientID) as ClientName,
(select DName from Common_DCode c where c.DCode=a.address) as Area,
substring(a.address,1,2) as areaCode,substring(a.address,3,2) as cityCode,substring(a.address,5,2) as countyCode
FROM EC_Web_StoreInfo a, @indextable t WHERE 1=1 '+@condition+' and a.id=t.nid
and t.id between '+@PageLowerBound+' and '+@PageUpperBound+'
order by t.id ')
end
set nocount off
GO
sql2005里面有rownumber可以解决这个问题
select 姓名=aname,支出钱=amoney,收入钱='',时间=atime from a union all select bname,支出钱='',收入钱=bmoney,时间=btime from b order by 时间如果能生成一个自动增长列,那么我想按照这个列进行排序,然后调用分页存储过程的,所以如果能够生成这两个表的一个自动增长列呢??(我用的是sqlserver2005)