/* 按照型号 查询 @partno 要查询的型号 @pageno 当前要返回的页 @pagesize 每页大小 ###################################### 算法: 当查询第 pageno 页时,查询 前(top) pagesize 条记录 但是记录号 不在 (pageno-1)*pagesize 的结果集中;当 pageno=1 时 只查询 top pagesize 页。 参数说明: @partno nvarchar(100), ----------要查询的型号 @pageno int=1, --------- 要显示的页号 @pagesize int=30, ----------每页条数 @pagecount int=-1, --------- 页数 @rowscount int=-1 ----------条数 ###################################### */ CREATE proc dbo.prco_partsearchpage @partno nvarchar(100), @pageno int=1, @pagesize int=30, @pagecount int=-1, @rowscount int=-1 as declare @tblname nvarchar(102) declare @sqlexec nvarchar(4000) declare @sqlexec2 nvarchar(2000) declare @sellist nvarchar(1000) declare @where nvarchar(100) declare @orderby nvarchar(100) set @sellist=' * ' set @orderby='' --set @partno=dbo.f_format(@partno) --set @where=' where dbo.f_format(partno) like '''+@partno+'%''' /* 如果要启用 模糊 查询 就需要 启用 上面的两条语句 同时去掉下面的 一条 语句 同时为了提高性能 还要把 条数和页数统计去掉 */ set @where=' where partno like '''+@partno+'%''' set @tblname=dbo.f_gettable(@partno) if dbo.f_istableexist(@tblname)=0 ------------如果 表不存在 则 返回空 不返回任何结果集 return ----------------------------------------------------------------------- if @pagesize<=0 set @pagesize=30 if @pagecount=-1 or @rowscount=-1 begin set @sqlexec='select @cc=count(*) from '+@tblname+@where EXECUTE sp_executesql @sqlexec,N'@cc INT output',@rowscount output set @pagecount=(@rowscount-1)/@pagesize+1 end if @pageno>@pagecount set @pageno=@pagecount if @pageno<=0 set @pageno=1 ----------------------------------------------------------------------- if @pageno=1 set @sqlexec='select top '+Convert(nvarchar(20),@pagesize)+@sellist+' from '+@tblname+@where+@orderby else begin set @sqlexec='select top '+Convert(nvarchar(20),@pagesize)+@sellist+' from '+@tblname+@where+' and pid not in' set @sqlexec2='select top '+Convert(nvarchar(20),(@pageno-1)*@pagesize)+' pid from '+@tblname+@where+@orderby set @sqlexec=@sqlexec+'('+@sqlexec2+')'+@orderby end --select @sqlexec exec sp_executesql @sqlexec select @pageno as pageno,@pagesize as pagesize,@rowscount as rowscount,@pagecount as pagecount GO