09年写过一次分页存储过程,今天偶然发现,以为丢了,,拿出来,共享下,以后也供自己使用:
1 set ANSI_NULLS ON 2 set QUOTED_IDENTIFIER ON 3 go 4 5 -- ============================================= 6 -- Author: ZhangZF 7 -- Create date: 02/24/2009 00:49 8 -- Description: 第一次使用存储过程写分页程序,暂定为V1.0,以后会多加修正.在此深深感谢史向平大哥的鼎力相助,感谢! 9 -- ============================================= 10 ALTER PROCEDURE [dbo].[PROC_PAGE] 11 @ROWCOUNT INT=0 OUTPUT, --总记录数 12 @PAGEINDEX INT=1, --页索引 13 @PAGESIZE INT=10, --单页显示记录数 14 @TYPE NVARCHAR(10)=N'ASC',--排序类型 ASC:正序 DESC:倒序 15 @TABLENAME NVARCHAR(50), --查询表名称 16 @COLUMN NVARCHAR(20)=N'ID' --排序字段 17 AS 18 BEGIN 19 DECLARE @MOD INT,@BEGINROW INT,@ENDROW INT 20 DECLARE @SQL NVARCHAR(2000) 21 SELECT @BEGINROW=(@PAGEINDEX-1)*@PAGESIZE+1 22 SELECT @ENDROW=@PAGEINDEX*@PAGESIZE 23 SELECT @SQL='WITH #TEMP '+ 24 'AS (SELECT *,ROW_NUMBER() OVER(ORDER BY '+@COLUMN+' '+@TYPE+') AS ZID FROM '+@TABLENAME+')'+ 25 'SELECT * FROM #TEMP WHERE ZID BETWEEN '+CONVERT(NVARCHAR,@BEGINROW)+' AND '+CONVERT(NVARCHAR,@ENDROW)+'' 26 EXEC(@SQL) 27 -- PRINT @SQL 28 29 SET @SQL='WITH #TEMP '+ 30 'AS (SELECT * FROM '+@TABLENAME+') 31 SELECT @ROWCOUNT=COUNT(*) FROM #TEMP' 32 EXECUTE SP_EXECUTESQL @SQL,N'@ROWCOUNT INT OUTPUT',@ROWCOUNT OUTPUT 33 END