CREATE PROCEDURE [dbo].[UP_GridViewPagerCplexSql] (
@recordTotal INT OUTPUT, --输出记录总数
@ComplexSql VARCHAR(max), --查找sql语句
@pageSize INT = 20, --每页记录数
@pageNo INT =1, --当前页
@orderString VARCHAR(200) --排序条件
)
AS
BEGIN
DECLARE @beginRow INT
DECLARE @endRow INT
DECLARE @tempLimit VARCHAR(8000)
DECLARE @tempCount NVARCHAR(max)
DECLARE @tempMain VARCHAR(max)
SET @beginRow = @pageNo * @pageSize + 1
SET @endRow = (@pageNo+1) * @pageSize
SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)
--输出参数为总记录数
SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM ('+ @ComplexSql+') AS my_temp'
--PRINT @tempCount
EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT
--主查询返回结果集
SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER ('+@orderString+') AS rows ,* FROM ('+@ComplexSql+' ) main) AS main_temp WHERE '+@tempLimit
--PRINT len(@tempMain)
EXECUTE (@tempMain)