USE [UTMP_RC_121213] GO /****** Object: StoredProcedure [dbo].[PageProc] Script Date: 01/05/2013 08:45:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 刘晓伦 -- Create date: 12-10-13 -- Description: 分页存储过程, -- 如果使用ExcuteReader()方法执行此存储过程 -- 必须先reader.close()才能得到输出参数 -- ============================================= ALTER PROCEDURE [dbo].[PageProc] ( @sqlStr nvarchar(max), ----SQL语句 @startRow int, ----开始的行 @pageSize int, ----一页多少行 @orderBy nvarchar(max), ----排序条件 @rowCount int = 1 output ----一共多少行 ) AS BEGIN SET NOCOUNT ON; Declare @sql nvarchar(max) Declare @csql nvarchar(max) --todo:此处为了方便使用,没有考虑性能,意图是得到一共有多少行 select @csql = 'select @Counts = count(*) from ('+@sqlStr+') as t' select @sql = 'select * from (select ROW_NUMBER() OVER (#order_by_replace_holder#) AS RINDEX ,* FROM ( '+@sqlStr+' ) as t ) as b where '+ CAST(@startRow+1 as varchar)+' <= RINDEX and RINDEX <= '+CAST(@startRow+@pageSize as varchar) select @sql = REPLACE(@sql,'#order_by_replace_holder#',@orderBy) --把一共有多少行记录写入输出参数 exec sp_executesql @csql,N'@Counts int out ',@rowCount out --获得检索结果 exec sp_executesql @sql END
在2013-1-5修改过