对于存储过程,不知道人们为什么 使用 not in 的方式来区分数据,其实 这样更加慢,对于一般的数据查询,结果的排序其实不是最主要的,效率才是最关键的,因此这里,不使用not in 的方式来查询 而是使用 top 排序的方式,如果查询的是前几页那么使用一种排序查询方式,而查询的是后几页就使用相反的一种排序方式,具体如何使用不同的排序,要根据页面索引来决定了,最好已总页的1/2为分解点
drop proc [Turnpage] go ------分页存储过程 CREATE PROC [dbo].[Turnpage] @qCols varchar(200), --需要查询的列 @qTables varchar(200), --需要查询的表和条件 @iKey varchar (20), --排序字段1 这里 排序字段1 和排序字段2 是正好想法的两种排序方式 例如 order by a desc 和 order by a asc @oKey varchar(20), --排序字段2 @pageSize int, --每页的行数 @pageNumber int, --要显示的页码, 从开始 @p int--------显示的排序的方式 @p=0的话 是按照首次加载的方式来排序 AS set nocount on BEGIN DECLARE @sqlText AS varchar(1000) DECLARE @sqlTable AS varchar(1000)
SET @sqlTable = 'SELECT TOP ' + CAST((@pageNumber + 1) * @pageSize AS varchar(30)) + ' ' + @qCols +' from '+ @qTables + ' '+@oKey+ '' SET @sqlText = 'select top '+CAST(@pageSize AS varchar(30))+' * '+ ' from ('+@sqlTable +') as table1 '+ @iKey+'' if(@p=0) begin EXEC (' select * from ('+@sqlText+') as table2 '+@oKey+ '') end else begin EXEC (' select * from ('+@sqlText+') as table2 ') end
--print(@sqltext) END go