此存储过程在集于SQL Server 2005 版本或以上版本,如果前台页设置 每页显示15,此存储过程返回的结果集只有15条数据。
此存储过程还集成 如果查询出来的数据量超过预设数据量,则返回0条数据。
此存储过程在集于SQL Server 2005 版本或以上版本,如果前台页设置 每页显示15,此存储过程返回的结果集只有15条数据。EXEC PROC_Page 'T1.* ',' FROM TABLE T1 ',' T1.ID DESC ',15,2,10000
CREATE PROC [dbo].[PROC_Page](
@SQLCOLUMN VARCHAR(8000)='', --SELECT 内容
@SQLFROM VARCHAR(8000)='', --SELECT 之外内容
@SQLORDER VARCHAR(8000)='', --排序
@PageSize INT=0, --每页多少条
@PageNum INT=1, --当前页数
@MaxCount INT=10000 --显示上线
)
AS
BEGIN
SET NOCOUNT ON;
Declare @CountSql NVARCHAR(4000),@COUNT INT,@MaxPage Numeric(18,0),@SQL VARCHAR(8000)
SET @CountSql=N'SELECT @COUNT=COUNT(1) FROM (SELECT TOP ' +
CAST(@MaxCount AS VARCHAR) + ' 1 AS NUM ' + @SQLFROM + ') TZ '
EXEC SP_EXECUTESQL @CountSql,N'@COUNT INT OUTPUT',@COUNT OUTPUT
IF(@COUNT = @MaxCount)
BEGIN
SELECT '-1' AS MaxCount,@PageSize AS PageSize, '0' AS MaxPage
SET @SQL = 'SELECT TOP 0 ' + @SQLCOLUMN +' '+ @SQLFROM
EXEC (@SQL)
RETURN;
END
SELECT @MaxPage = (CASE WHEN ISNULL(@COUNT,0)=0 OR @PageSize=0 THEN 0 ELSE
CEILING(CAST(@COUNT AS NUMERIC(18,6))/CAST(@PageSize AS NUMERIC(18,6)))END)
SELECT @COUNT AS MaxCount,@PageSize AS PageSize, @MaxPage AS MaxPage
If @PageNum > @MaxPage
Set @PageNum = @MaxPage
DECLARE @BNUM INT,@ENUM INT
SELECT @BNUM = (@PageNum-1)*@PageSize+1,@ENUM = @PageNum * @PageSize
SET @SQL = 'SELECT * FROM( SELECT ROW_NUMBER() OVER(ORDER BY ' + @SQLORDER + ') AS ROWNUM,' +
@SQLCOLUMN +' '+ @SQLFROM + ' ) A WHERE ROWNUM>=' +
CAST(@BNUM AS VARCHAR) + ' AND ROWNUM <=' + CAST(@ENUM AS VARCHAR)
EXEC (@SQL)
SET NOCOUNT OFF;
END