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修改过