问题描述
存储过程: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)='',--排序,可…
楼主就参照这个吧,挺不错的
解决方案十:
关注并学习下呵呵。。。
解决方案十一:
给你个带注释的,这个写的很不错,楼主可以参考一下