一支通用分页存储过程

  1
  2/*************************************************************
  3**  Name        :    CurrentPage_Query
  4**  Creater        :    PPCoder2.0 Designed By PPTech Studio 
  5**  Create Date    :    2006-1-5 16:15:58
  6**  Modifer        :   
  7**  Modify Date    :    2006-1-5 16:15:58
  8**  Description :    store procedure for pager
  9**************************************************************/
    
 10ALTER PROCEDURE CurrentPage_Query
 11  @TableName         NVARCHAR(50), --TableName
 12  @OrderByColumn        NVARCHAR(50), --Sort by ths column
 13  @SortType    bit = 1,         --sort type:,0-asc,1-desc
 14  @QueryColumnList    NVARCHAR(800)='*',--query column list
 15  @PageSize   int = 20,         --page size
 16  @CurrentPage       int = 1,         --current page
 17  @CustomCondition  NVARCHAR(800)=null,--query condition
 18  @DoCount    bit = 1,         --whether count result count ,0 no ,1 yes
 19  @HasConstrainField bit = 1,
 20  @ReturnCount    int = 0 OUTPUT   --total pages
 21AS
 22    DECLARE @DynamicSQLString NVARCHAR(4000)
 23    DECLARE @WhereFirstSegment NVARCHAR(800)
 24    DECLARE @WhereDynamicSegment NVARCHAR(800)
 25    IF @CustomCondition is null or rtrim(@CustomCondition)=''
 26    BEGIN
 27        SET @WhereFirstSegment=' WHERE '
 28        SET @WhereDynamicSegment='  '
 29    END
 30    ELSE
 31    BEGIN
 32        SET @WhereFirstSegment=' WHERE ('+@CustomCondition+') AND '
 33        SET @WhereDynamicSegment=' WHERE ('+@CustomCondition+''
 34    END
 35
 36    IF @DoCount>0 
 37    BEGIN
 38        SET @DynamicSQLString='SELECT @ReturnCount=count(*) FROM '+@TableName+@WhereDynamicSegment
 39        EXEC sp_executesql @DynamicSQLString,N'@ReturnCount int OUTPUT',@ReturnCount OUTPUT--caculate the page count
 40    END
 41    print @ReturnCount
 42--------------------------------------------------------------------------------
 43    IF @HasConstrainField = 0
 44    BEGIN
 45        GOTO noIdentity
 46    END
 47
 48---------------------------------------------------------------------------------
 49    IF @CurrentPage=1
 50    BEGIN
 51        SET @DynamicSQLString='SELECT TOP '+CAST(@PageSize AS NVARCHAR)+' '+@QueryColumnList+' FROM '+@TableName
 52        SET @DynamicSQLString = @DynamicSQLString + @WhereDynamicSegment
 53        SET @DynamicSQLString = @DynamicSQLString + 'ORDER BY '+@OrderByColumn+CASE @SortType WHEN 0 THEN '' ELSE ' DESC' END
 54        EXEC(@DynamicSQLString)
 55        RETURN
 56    END
 57
 58----------------------------------------------------------------------------------
 59hasIdentity:
 60
 61    IF @SortType=0
 62    BEGIN
 63        SET @DynamicSQLString='SELECT TOP '+CAST(@PageSize AS NVARCHAR)+' '+@QueryColumnList+' FROM '+@TableName
 64        SET @DynamicSQLString = @DynamicSQLString + @WhereFirstSegment+@OrderByColumn+'>'
 65        SET @DynamicSQLString = @DynamicSQLString + '(SELECT MAX('+@OrderByColumn+')  '
 66        SET @DynamicSQLString = @DynamicSQLString + ' FROM (SELECT TOP '+CAST(@PageSize*(@CurrentPage-1AS NVARCHAR)+' '+@OrderByColumn+' FROM '
 67        SET @DynamicSQLString = @DynamicSQLString + @TableName
 68        SET @DynamicSQLString = @DynamicSQLString + @WhereDynamicSegment
 69        SET @DynamicSQLString = @DynamicSQLString + 'ORDER BY '+@OrderByColumn+') AS PagerTempTable) '
 70        SET @DynamicSQLString = @DynamicSQLString + 'ORDER BY '+@OrderByColumn
 71    END
 72    ELSE
 73    BEGIN
 74        SET @DynamicSQLString='SELECT TOP '+CAST(@PageSize AS NVARCHAR)+' '+@QueryColumnList+ ' FROM '+@TableName
 75        SET @DynamicSQLString = @DynamicSQLString + @WhereFirstSegment+@OrderByColumn+'<'
 76        SET @DynamicSQLString = @DynamicSQLString + '(SELECT MIN('+@OrderByColumn+')  '
 77        SET @DynamicSQLString = @DynamicSQLString + ' FROM (SELECT TOP '+CAST(@PageSize*(@CurrentPage-1AS NVARCHAR)+' '+ @OrderByColumn+' FROM '
 78        SET @DynamicSQLString = @DynamicSQLString + @TableName
 79        SET @DynamicSQLString = @DynamicSQLString + @WhereDynamicSegment
 80        SET @DynamicSQLString = @DynamicSQLString + 'ORDER BY '+@OrderByColumn+' DESC) AS PagerTempTable)' 
 81        SET @DynamicSQLString = @DynamicSQLString + ' ORDER BY  ' + @OrderByColumn+' DESC'
 82    END
 83    EXEC(@DynamicSQLString)
 84    RETURN
 85-----------------------------------------------------------------------------------
 86
 87------------------------------------------------------------------------------------
 88noIdentity:
 89    DECLARE @OrderStr NVARCHAR(1000
 90    DECLARE @FdName NVARCHAR(250)
 91    DECLARE @ID_MIN NVARCHAR(20)
 92    DECLARE @ID_MAX NVARCHAR(20)
 93    DECLARE @Obj_ID int            
 94
 95    SELECT @FdName='[ID_'+CAST(NEWID() AS NVARCHAR(40))+']'
 96    SELECT @ID_MIN=CAST(@PageSize*(@CurrentPage-1AS NVARCHAR(20))
 97    SELECT @ID_MAX=CAST(@PageSize*@CurrentPage-1 AS NVARCHAR(20))
 98
 99    IF @SortType>0
100    BEGIN
101        SELECT @OrderStr=' ORDER BY '+@OrderByColumn+' DESC' 
102    END
103    ELSE
104    BEGIN 
105        SELECT @OrderStr=' ORDER BY '+@OrderByColumn 
106    END
107           
108    SET @DynamicSQLString='SELECT '+@FdName+'=IDENTITY(int,0,1),'+@QueryColumnList
109    SET @DynamicSQLString = @DynamicSQLString + ' INTO #DynamicTable FROM '+@TableName+@WhereDynamicSegment+@OrderStr
110    SET @DynamicSQLString = @DynamicSQLString + ' SELECT '+@QueryColumnList+' FROM #DynamicTable where '+@FdName
111    SET @DynamicSQLString = @DynamicSQLString + ' BETWEEN '+@ID_MIN+' AND '+@ID_MAX
112    EXEC(@DynamicSQLString)
113RETURN 
114
115
116
117
118
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值