sql分页存储过程扩展
ALTER PROCEDURE [dbo].[Prc_GetPage] ( @startIndex INT , -- 开始索引号 @endindex INT , -- 结束索引号 @tblName VARCHAR(1000) , -- 表名 @fldName VARCHAR(3000) , -- 显示字段名 @OrderfldName VARCHAR(255) , -- 排序字段名 @IsReCount BIT = 0 , -- 返回记录总数, 非 0 值则返回 @OrderType BIT = 0 , -- 设置排序类型, 非 0 值则降序 @strWhere VARCHAR(1000) = '' -- 查询条件 (注意: 不要加 where) ) AS DECLARE @strSQL VARCHAR(6000) -- 主语句 DECLARE @strTmp VARCHAR(100) -- 临时变量 DECLARE @strOrder VARCHAR(400) -- 排序类型 IF @OrderType != 0 BEGIN SET @strOrder = 'Desc' END ELSE BEGIN SET @strOrder = 'Asc' END SET @strSQL = 'WITH orderList AS ( ' + 'SELECT ROW_NUMBER() OVER (ORDER BY ' + @OrderfldName + ' ' + @strOrder + ')AS Row, ' + @fldName + ' ' + 'from ' + @tblName IF @strWhere != '' SET @strSQL = @strSQL + ' where ' + @strWhere SET @strSQL = @strSQL + ')' + 'SELECT * ' + 'FROM orderlist ' + 'WHERE Row between ' + STR(@startIndex) + ' and ' + STR(@endIndex) + '' PRINT @strSQL IF @IsReCount != 0 BEGIN SET @strSQL = ' select count(1) as Total from [' + @tblName + ']' IF @strWhere != '' SET @strSQL = @strSQL + ' where ' + @strWhere END --print(@strSQL) EXEC (@strSQL)
ALTER PROCEDURE [dbo].[Prc_GetPagedReCordV2] ( @startIndex INT , -- 开始索引号 @endindex INT , -- 结束索引号 @tblName VARCHAR(3000) , -- 表名 @fldName VARCHAR(255) , -- 显示字段名 @OrderfldName VARCHAR(255) , -- 排序字段名 @IsReCount BIT = 0 , -- 返回记录总数, 非 0 值则返回 @OrderType BIT = 0 , -- 设置排序类型, 非 0 值则降序 @strWhere VARCHAR(1000) = '' , -- 查询条件 (注意: 不要加 where) @totalCount INT OUTPUT ) AS DECLARE @strSQL NVARCHAR(4000) -- 主语句 DECLARE @strTmp VARCHAR(100) -- 临时变量 DECLARE @strOrder VARCHAR(400) -- 排序类型 IF @OrderType != 0 BEGIN SET @strOrder = 'Desc' END ELSE BEGIN SET @strOrder = 'Asc' END IF @IsReCount != 0 BEGIN SET @strSQL = ' select @total = count(1) from ' + @tblName + ' ' IF @strWhere != '' SET @strSQL = @strSQL + ' where ' + @strWhere END ELSE BEGIN SET @strSQL = ' select @total = count(1) from ' + @tblName + ' ' IF @strWhere != '' SET @strSQL = @strSQL + ' where ' + @strWhere END PRINT ( @strSQL ) --exec (@strSQL) EXECUTE sp_executesql @strSQL, N'@total int output', @totalCount OUTPUT ; SELECT @totalCount SET @strSQL = 'WITH orderList AS ( ' + 'SELECT ROW_NUMBER() OVER (ORDER BY ' + @OrderfldName + ' ' + @strOrder + ')AS Row, ' + @fldName + ' ' + 'from ' + @tblName IF @strWhere != '' SET @strSQL = @strSQL + ' where ' + @strWhere SET @strSQL = @strSQL + ')' + 'SELECT * ' + 'FROM orderlist ' + 'WHERE Row between ' + STR(@startIndex) + ' and ' + STR(@endIndex) + '' EXEC (@strSQL)