在用存储过程做分页搜索有点问题,请大家帮忙!分不够再加!

问题描述

存储过程:ifExists(SelectnameFromsysobjectsWherename='csp_Paging'Andtype='P')DropProceduredbo.csp_PagingGo/**临时表分页SP.*/CreatePROCdbo.csp_Paging@PageSizeINT=20,@PageIndexINT=1,@DoCountBIT=0,@keyWordvarchar(200),@inputtypevarchar(100)ASSETNOCOUNTONIF@DoCount=1BEGINSELECTCOUNT(newsId)ASCTFROMnewswhere@inputtypelike'%'+@keyWord+'%'ENDELSEBEGIN--@PageLowerBound:第@PageIndex页的其始索引。--@PageUpperBound:第@PageIndex页的终止索引。DECLARE@PageLowerBoundINT,@PageUpperBoundINT--建立临时表。CREATETABLE#Temp(TempIDINTidentity(1,1)PRIMARYKEY,newsIdINT)SET@PageLowerBound=(@PageIndex-1)*@PageSize+1SET@PageUpperBound=@PageIndex*@PageSize--提高插入效率。SETROWCOUNT@PageUpperBoundINSERTINTO#Temp(newsId)SELECTnewsIdFROMnewswhere@inputtypelike'%'+@keyword+'%'SELECTa.*FROMnewsa,#Temptwhere@inputtypelike'%'+@keyword+'%'and(a.newsId=t.newsId)AND(t.TempIDbetween@PageLowerBoundand@PageUpperBound)--显示删除临时表DROPTABLE#TempENDSETNOCOUNTOFFGOcode:privatevoidpage(boolIsButton){stringstrPageIndex=string.Empty;//如果是按钮导航if(IsButton){strPageIndex=tbPage.Text.ToString();}else{strPageIndex=Request.QueryString["page"];}//如果没有页码则显示第一页if(strPageIndex==""||strPageIndex==null||int.Parse(strPageIndex)<=0){strPageIndex="1";}//将页码转换成整形CurrentPage=int.Parse(strPageIndex);//指定页面大小intpageSize=2;Procconn=newProc();//得到记录总数TotalCount=conn.GetTotalCounts(this.TextBox1.Text,this.DropDownList1.SelectedValue);Response.Write(TotalCount);TotalPage=Convert.ToInt32(Math.Ceiling(TotalCount/pageSize));//判断页码的有效性if(CurrentPage>TotalPage){CurrentPage=TotalPage;}HyperLink2.NavigateUrl="adminUser.aspx?page="+(CurrentPage-1)+"";HyperLink3.NavigateUrl="adminUser.aspx?page="+(CurrentPage+1)+"";HyperLink4.NavigateUrl="adminUser.aspx?page="+TotalPage+"";DataTablereader=conn.spPages(pageSize,CurrentPage,this.TextBox1.Text,this.DropDownList1.SelectedValue);dgUser.DataSource=reader;dgUser.DataBind();}

解决方案

解决方案二:
没有人知道??大家帮帮忙哦!
解决方案三:
你在网上找个可以用的代码不就得了!!帮你顶!!
解决方案四:
在网上找???你帮我找个...
解决方案五:
给个分页的存储过程给你,不过没有建临时表的过程。可以参考下分页的代码:CREATEPROCEDURESearch(@TableNamenvarchar(1000),@SearchContentnvarchar(1000),@WhereStringnvarchar(1000),@OrderStringnvarchar(1000),@PageSizeint,@PageIndexint,@PageCountintoutput,@RecordCountintoutput)ASdeclare@SQLnvarchar(1000)declare@strnvarchar(1000)set@str=N'select@RecordCount=count(*)from'+@TableName+''+@WhereStringexecsp_executesql@str,N'@RecordCountintoutput',@RecordCountoutputset@PageCount=ceiling(@RecordCount*1.0/@PageSize)if@PageIndex=0or@PageCount<=1beginset@SQL='selecttop'+str(@PageSize)+''+@SearchContent+'from'+@TableName+''+@WhereString+''+@OrderString+'desc'endelsebeginif@PageIndex=@PageCount-1beginset@SQL='select'+@SearchContent+'from(selecttop'+str(@RecordCount-@PageSize*@PageIndex)+'*from'+@TableName+''+@WhereString+''+@OrderString+'asc)TempTable'+@OrderString+'desc'endelsebeginset@SQL='selecttop'+str(@PageSize)+''+@SearchContent+'from(selecttop'+str(@RecordCount-@PageSize*@PageIndex)+'*from'+@TableName+''+@WhereString+''+@OrderString+'asc)TempTable'+@OrderString+'desc'endendexec(@SQL)GO
解决方案六:
网上多的很,我看你的分页的效率不怎么高,也存在一个问题为何要创建一个临时表?根本没必要。
解决方案七:
给你个带注释的,这个写的很不错,楼主可以参考一下CREATEprocgetdataset@TableListVarchar(200)='*',--搜索表的字段,比如:’id,datatime,job‘,用逗号隔开@TableNameVarchar(30),--搜索的表名@SelectWhereVarchar(500)='',--搜索条件,这里不用写where,比如:job=’teacher‘andclass='2'@SelectOrderIdVarchar(20),--表主键字段名。比如:id@SelectOrderVarchar(200)='',--排序,可以使用多字段排序但主键字段必需在最前面.也可以不写,比如:orderbyclassasc@intPageNoint=1,--页号@intPageSizeint=10,--每页显示数@RecordCountintOUTPUT--总记录数(存储过程输出参数)asdeclare@TmpSelectNVarchar(600)declare@TmpNVarchar(600)setnocounton--关闭计数set@TmpSelect='select@RecordCount=count(*)from'+@TableName+''+@SelectWhereexecutesp_executesql@TmpSelect,--执行上面的sql语句N'@RecordCountintOUTPUT',--执行输出数据的sql语句,output出总记录数@RecordCountOUTPUTif(@RecordCount=0)--如果没有贴子,则返回零return0/*判断页数是否正确*/if(@intPageNo-1)*@intPageSize>@RecordCount--页号大于总页数,返回错误return(-1)setnocountoff--打开计数if@SelectWhere!=''beginset@TmpSelect='selecttop'+str(@intPageSize)+''+@TableList+'from'+@TableName+'where'+@SelectOrderId+'notin(selecttop'+str((@intPageNo-1)*@intPageSize)+''+@SelectOrderId+'from'+@TableName+''+@SelectWhere+''+@SelectOrder+')and'+@SelectWhere+''+@SelectOrderendelsebeginset@TmpSelect='selecttop'+str(@intPageSize)+''+@TableList+'from'+@TableName+'where'+@SelectOrderId+'notin(selecttop'+str((@intPageNo-1)*@intPageSize)+''+@SelectOrderId+'from'+@TableName+''+@SelectOrder+')'+@SelectOrderendexecutesp_executesql@TmpSelectreturn(@@rowcount)GO

解决方案八:
Magic_YJL可以再给个调用存储过程的代码吗?马上就要交项目了...
解决方案九:
引用6楼Magic_YJL的回复:

给你个带注释的,这个写的很不错,楼主可以参考一下SQLcodeCREATEprocgetdataset@TableListVarchar(200)='*',--搜索表的字段,比如:’id,datatime,job‘,用逗号隔开@TableNameVarchar(30),--搜索的表名@SelectWhereVarchar(500)='',--搜索条件,这里不用写where,比如:job=’teacher‘andclass='2'@SelectOrderIdVarchar(20),--表主键字段名。比如:id@SelectOrderVarchar(200)='',--排序,可…

楼主就参照这个吧,挺不错的
解决方案十:
关注并学习下呵呵。。。
解决方案十一:
给你个带注释的,这个写的很不错,楼主可以参考一下

时间: 2024-10-29 20:34:23

在用存储过程做分页搜索有点问题,请大家帮忙!分不够再加!的相关文章

结合asp和存储过程做的搜索程序_存储过程

比较复杂,可以支持多种逻辑符,包括 + - and or 空格等,并且根据需要随便增加.可以根据条件选择在那个表中搜索,对速度也做了优化,可以说是很快的.当然因为是以前写的,存在不少毛病.存储过程中用到几乎所有sql server的特性,如光标(记录集分页)等.好了,不吹了,自己看程序吧. asp 函数 复制代码 代码如下:   function AnalyseKeyword(a_strSource)       dim m_strDest , m_intLoop        dim m_in

结合asp和存储过程做的搜索程序

比较复杂,可以支持多种逻辑符,包括 + - and or 空格等,并且根据需要随便增加.可以根据条件选择在那个表中搜索,对速度也做了优化,可以说是很快的.当然因为是以前写的,存在不少毛病.存储过程中用到几乎所有sql server的特性,如光标(记录集分页)等.好了,不吹了,自己看程序吧. asp 函数 复制代码 代码如下:   function AnalyseKeyword(a_strSource)       dim m_strDest , m_intLoop        dim m_in

SQL Server 分页查询通用存储过程(只做分页查询用)_MsSql

自开始做项目以来,一直在用.这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用. /*---------------------------------------------- *procedure name : P_PageResult * author :Fay * create date : 2014-07-18 */ CREATE PROCEDURE prcPageResult -- 获得某一

SQL Server 分页查询通用存储过程(只做分页查询用)

自开始做项目以来,一直在用.这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用. /*---------------------------------------------- *procedure name : P_PageResult * author :Fay * create date : 2014-07-18 */ CREATE PROCEDURE prcPageResult -- 获得某一

SQL Server 存储过程的分页方案比拼

server|存储过程|分页 SQL Server 存储过程的分页,这个问题已经讨论过几年了,很多朋友在问我,所以在此发表一下我的观点建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_

SQL Server 存储过程的分页

server|存储过程|分页 SQL Server 存储过程的分页,这个问题已经讨论过几年了,很多朋友在问我,所以在此发表一下我的观点建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_

ASP.NET存储过程实现分页效果(三层架构)_实用技巧

本文实例为大家分享了ASP.NET存储过程实现分页的具体代码,供大家参考,具体内容如下 实现效果: 文本框内输入跳转的页数,点击GO会跳转到该页 首先在项目下加入BLL,DAL,DataAccess,MODEL类库1.前台界面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="原始刷新分页.aspx.cs" Inherits="分页.原始刷新分页" %&g

关于使用coreseek并为其做分页的介绍_php技巧

coreseek 做分页时找数据总量还真不好找.以为他会给一个方法(函数)什么的去获取,结果却不是.首先需要了解:num_matches: 当前返回的结果数,<= limit设置值.max_matches: 最多返回的结果数,默认为1000,用户最多只能看到1000条搜索结果.这个是在csft_mysql.conf中设置的.total_found: 结果总数.索引中所有满足查询条件的文档总数.这个是在你查询的返回结果中的数组中有的.当然前提是你必须在query前设置:$this->sc->

GridView用存储过程自定义分页分页的完整例子

问题描述 谁有GridView用存储过程自定义分页分页的完整例子(C#)给一个 解决方案 解决方案二:datalist,repeater存储过程分页带1,2,3,4,5,6,7导航的记住把分都给我哦存储过程:直接复制进去CREATEprocup_GetTopicList@a_TableListVarchar(200),@a_TableNameVarchar(30),@a_SelectWhereVarchar(500),@a_SelectOrderIdVarchar(20),@a_SelectOr