-- ============================================= -- Description: <SQL2005及后续版本通用分页存储过程>调用方法: sp_Pager2005 'xtest','*','ORDER BY ID ASC','xname like ''%222name%''',2,20,0,0 -- 适合从单个表查询数据 -- ============================================= ALTER PROCEDURE [ dbo ]. [ Proc_GetDataPaged_2005 ] @tblName varchar( 255), -- 表名如:'xtest' @strGetFields varchar( 1000) = ' * ', -- 需要返回的列如:'xname,xdemo' @strOrder varchar( 255) = '', -- 排序的字段名如:'order by id desc' @strWhere varchar( 1500) = '', -- 查询条件(注意:不要加where)如:'xname like ''%222name%''' @pageIndex int = 1, -- 开始记录位置 @pageSize int = 20, -- 每页记录数如:20 @recordCount int output, -- 记录总数 @doCount bit = 0 -- 非0则统计,为0则不统计(统计会影响效率) AS declare @strSQL varchar( 5000) declare @strCount nvarchar( 1000) -- 总记录条数 if( @doCount != 0) begin if( @strWhere != '') begin set @strCount = ' set @num=(select count(1) from ' + @tblName + ' where ' + @strWhere + ' ) ' end else begin set @strCount = ' set @num=(select count(1) from ' + @tblName + ' ) ' end EXECUTE sp_executesql @strCount ,N ' @num INT output ', @RecordCount output end if @strWhere != '' begin set @strWhere = ' where ' + @strWhere end set @strSQL = ' SELECT * FROM (SELECT ROW_NUMBER() OVER ( ' + @strOrder + ' ) AS ROWID, ' set @strSQL = @strSQL + @strGetFields + ' FROM [ ' + @tblName + ' ] ' + @strWhere set @strSQL = @strSQL + ' ) AS sp WHERE ROWID BETWEEN ' + str(( @pageindex - 1) * @pagesize + 1) set @strSQL = @strSQL + ' AND ' + str( @pageindex * @pagesize) exec ( @strSQL)