SQL SERVEL 分页存储过程

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

 

你可能感兴趣的:(存储过程)