0
点赞
收藏
分享

微信扫一扫

sql2000和sql2005分页存储过程


MSSQL2000

sql2000和sql2005分页存储过程_Go


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->

sql2000和sql2005分页存储过程_Go

set

 ANSI_NULLS  ON

sql2000和sql2005分页存储过程_Go

set  QUOTED_IDENTIFIER  ON

sql2000和sql2005分页存储过程_Go

go

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

ALTER   PROC   [ dbo ] . [ PROCE_PageView2000 ]

sql2000和sql2005分页存储过程_Go

(

sql2000和sql2005分页存储过程_Go

@tbname       nvarchar ( 100 ),                -- 要分页显示的表名

sql2000和sql2005分页存储过程_Go

@FieldKey     nvarchar ( 1000 ),       -- 用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段

sql2000和sql2005分页存储过程_Go

@PageCurrent   int = 1 ,                -- 要显示的页码

sql2000和sql2005分页存储过程_Go

@PageSize     int = 10 ,                 -- 每页的大小(记录数)

sql2000和sql2005分页存储过程_Go

@FieldShow   nvarchar ( 1000 ) = '' ,       -- 以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段

sql2000和sql2005分页存储过程_Go

@FieldOrder   nvarchar ( 1000 ) = '' ,       -- 以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC

sql2000和sql2005分页存储过程_Go

@WhereString      nvarchar ( 1000 ) = N '' ,      -- 查询条件

sql2000和sql2005分页存储过程_Go

@RecordCount   int  OUTPUT              -- 总记录数

sql2000和sql2005分页存储过程_Go

)

sql2000和sql2005分页存储过程_Go

AS

sql2000和sql2005分页存储过程_Go

SET  NOCOUNT  ON

sql2000和sql2005分页存储过程_Go

-- 检查对象是否有效

sql2000和sql2005分页存储过程_Go

--

IF OBJECT_ID(@tbname) IS NULL

sql2000和sql2005分页存储过程_Go

--

BEGIN

sql2000和sql2005分页存储过程_Go

--

    RAISERROR(N'对象"%s"不存在',1,16,@tbname)

sql2000和sql2005分页存储过程_Go

--

    RETURN

sql2000和sql2005分页存储过程_Go

--

END

sql2000和sql2005分页存储过程_Go

--

IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0

sql2000和sql2005分页存储过程_Go

--

    AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0

sql2000和sql2005分页存储过程_Go

--

    AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0

sql2000和sql2005分页存储过程_Go

--

BEGIN

sql2000和sql2005分页存储过程_Go

--

    RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)

sql2000和sql2005分页存储过程_Go

--

    RETURN

sql2000和sql2005分页存储过程_Go

--

END

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

-- 分页字段检查

sql2000和sql2005分页存储过程_Go

IF   ISNULL ( @FieldKey ,N '' ) = ''

sql2000和sql2005分页存储过程_Go

BEGIN

sql2000和sql2005分页存储过程_Go

    

RAISERROR (N ' 分页处理需要主键(或者惟一键) ' , 1 , 16 )

sql2000和sql2005分页存储过程_Go

    

RETURN

sql2000和sql2005分页存储过程_Go

END

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

-- 其他参数检查及规范

sql2000和sql2005分页存储过程_Go

IF   ISNULL ( @PageCurrent , 0 ) < 1   SET   @PageCurrent = 1

sql2000和sql2005分页存储过程_Go

IF   ISNULL ( @PageSize , 0 ) < 1   SET   @PageSize = 10

sql2000和sql2005分页存储过程_Go

IF   ISNULL ( @FieldShow ,N '' ) = N ''   SET   @FieldShow = N ' * '

sql2000和sql2005分页存储过程_Go

IF   ISNULL ( @FieldOrder ,N '' ) = N ''

sql2000和sql2005分页存储过程_Go

    

SET   @FieldOrder = N ''

sql2000和sql2005分页存储过程_Go

ELSE

sql2000和sql2005分页存储过程_Go

    

SET   @FieldOrder = N ' ORDER BY  ' + LTRIM ( @FieldOrder )

sql2000和sql2005分页存储过程_Go

IF   ISNULL ( @WhereString ,N '' ) = N ''

sql2000和sql2005分页存储过程_Go

    

SET   @WhereString = N ''

sql2000和sql2005分页存储过程_Go

ELSE

sql2000和sql2005分页存储过程_Go

    

SET   @WhereString = N ' WHERE ( ' + @WhereString + N ' ) '

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

-- 如果@RecordCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@RecordCount赋值)

sql2000和sql2005分页存储过程_Go

IF   @RecordCount   IS   NULL

sql2000和sql2005分页存储过程_Go

BEGIN

sql2000和sql2005分页存储过程_Go

    

DECLARE   @sql   nvarchar ( 4000 )

sql2000和sql2005分页存储过程_Go

    

SET   @sql = N ' SELECT @RecordCount=COUNT(*) '

sql2000和sql2005分页存储过程_Go

        

+ N '  FROM  ' + @tbname

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @WhereString

sql2000和sql2005分页存储过程_Go

    

EXEC  sp_executesql  @sql ,N ' @RecordCount int OUTPUT ' , @RecordCount  OUTPUT

sql2000和sql2005分页存储过程_Go

END

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

-- 计算分页显示的TOPN值

sql2000和sql2005分页存储过程_Go

DECLARE   @TopN   varchar ( 20 ), @TopN1   varchar ( 20 )

sql2000和sql2005分页存储过程_Go

SELECT   @TopN = @PageSize ,

sql2000和sql2005分页存储过程_Go

    

@TopN1 = ( @PageCurrent - 1 ) * @PageSize

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

-- 第一页直接显示

sql2000和sql2005分页存储过程_Go

IF   @PageCurrent = 1

sql2000和sql2005分页存储过程_Go

    

EXEC (N ' SELECT TOP  ' + @TopN

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @FieldShow

sql2000和sql2005分页存储过程_Go

        

+ N '  FROM  ' + @tbname

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @WhereString

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @FieldOrder )

sql2000和sql2005分页存储过程_Go

ELSE

sql2000和sql2005分页存储过程_Go

BEGIN

sql2000和sql2005分页存储过程_Go

    

-- 处理别名

sql2000和sql2005分页存储过程_Go

     IF   @FieldShow = N ' * '

sql2000和sql2005分页存储过程_Go

        

SET   @FieldShow = N ' a.* '

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

    

-- 生成主键(惟一键)处理条件

sql2000和sql2005分页存储过程_Go

     DECLARE   @Where1   nvarchar ( 4000 ), @Where2   nvarchar ( 4000 ),

sql2000和sql2005分页存储过程_Go

        

@s   nvarchar ( 1000 ), @Field  sysname

sql2000和sql2005分页存储过程_Go

    

SELECT   @Where1 = N '' , @Where2 = N '' , @s = @FieldKey

sql2000和sql2005分页存储过程_Go

    

WHILE   CHARINDEX (N ' , ' , @s ) > 0

sql2000和sql2005分页存储过程_Go

        

SELECT   @Field =LEFT ( @s , CHARINDEX (N ' , ' , @s ) - 1 ),

sql2000和sql2005分页存储过程_Go

            

@s = STUFF ( @s , 1 , CHARINDEX (N ' , ' , @s ),N '' ),

sql2000和sql2005分页存储过程_Go

            

@Where1 = @Where1 + N '  AND a. ' + @Field + N ' =b. ' + @Field ,

sql2000和sql2005分页存储过程_Go

            

@Where2 = @Where2 + N '  AND b. ' + @Field + N '  IS NULL ' ,

sql2000和sql2005分页存储过程_Go

            

@WhereString = REPLACE ( @WhereString , @Field ,N ' a. ' + @Field ),

sql2000和sql2005分页存储过程_Go

            

@FieldOrder = REPLACE ( @FieldOrder , @Field ,N ' a. ' + @Field ),

sql2000和sql2005分页存储过程_Go

            

@FieldShow = REPLACE ( @FieldShow , @Field ,N ' a. ' + @Field )

sql2000和sql2005分页存储过程_Go

    

SELECT   @WhereString = REPLACE ( @WhereString , @s ,N ' a. ' + @s ),

sql2000和sql2005分页存储过程_Go

        

@FieldOrder = REPLACE ( @FieldOrder , @s ,N ' a. ' + @s ),

sql2000和sql2005分页存储过程_Go

        

@FieldShow = REPLACE ( @FieldShow , @s ,N ' a. ' + @s ),

sql2000和sql2005分页存储过程_Go

        

@Where1 = STUFF ( @Where1 + N '  AND a. ' + @s + N ' =b. ' + @s , 1 , 5 ,N '' ),    

sql2000和sql2005分页存储过程_Go

        

@Where2 = CASE

sql2000和sql2005分页存储过程_Go

            

WHEN   @WhereString = ''   THEN  N ' WHERE ( '

sql2000和sql2005分页存储过程_Go

            

ELSE   @WhereString + N '  AND ( '

sql2000和sql2005分页存储过程_Go

            

END + N ' b. ' + @s + N '  IS NULL ' + @Where2 + N ' ) '

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

    

-- 执行查询

sql2000和sql2005分页存储过程_Go

     EXEC (N ' SELECT TOP  ' + @TopN

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @FieldShow

sql2000和sql2005分页存储过程_Go

        

+ N '  FROM  ' + @tbname

sql2000和sql2005分页存储过程_Go

        

+ N '  a LEFT JOIN(SELECT TOP  ' + @TopN1

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @FieldKey

sql2000和sql2005分页存储过程_Go

        

+ N '  FROM  ' + @tbname

sql2000和sql2005分页存储过程_Go

        

+ N '  a  ' + @WhereString

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @FieldOrder

sql2000和sql2005分页存储过程_Go

        

+ N ' )b ON  ' + @Where1

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @Where2

sql2000和sql2005分页存储过程_Go

        

+ N '   ' + @FieldOrder )

sql2000和sql2005分页存储过程_Go

END

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


 

MSSQL2005


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->

sql2000和sql2005分页存储过程_Go

set  ANSI_NULLS 

ON

sql2000和sql2005分页存储过程_Go

set  QUOTED_IDENTIFIER  ON

sql2000和sql2005分页存储过程_Go

go

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

ALTER   PROCEDURE   [ dbo ] . [ PROCE_SQL2005PAGECHANGE ]

sql2000和sql2005分页存储过程_Go

(

sql2000和sql2005分页存储过程_Go

  @TableName

  varchar ( 50 ),             -- 表名

sql2000和sql2005分页存储过程_Go

  @ReFieldsStr   varchar ( 200 )  =   ' * ' ,    -- 字段名(全部字段为*)

sql2000和sql2005分页存储过程_Go

  @OrderString   varchar ( 200 ),          -- 排序字段(必须!支持多字段不用加order by)

sql2000和sql2005分页存储过程_Go

  @WhereString   varchar ( 500 )  = N '' ,   -- 条件语句(不用加where)

sql2000和sql2005分页存储过程_Go

  @PageSize   int ,                      -- 每页多少条记录

sql2000和sql2005分页存储过程_Go

  @PageIndex   int   =   1  ,                -- 指定当前为第几页

sql2000和sql2005分页存储过程_Go

  @TotalRecord   int  output             -- 返回总记录数

sql2000和sql2005分页存储过程_Go

)

sql2000和sql2005分页存储过程_Go

AS

sql2000和sql2005分页存储过程_Go

 

sql2000和sql2005分页存储过程_Go

BEGIN     

sql2000和sql2005分页存储过程_Go


sql2000和sql2005分页存储过程_Go

     --

处理开始点和结束点

sql2000和sql2005分页存储过程_Go

     Declare   @StartRecord   int ;

sql2000和sql2005分页存储过程_Go

     Declare

  @EndRecord   int ; 

sql2000和sql2005分页存储过程_Go

     Declare

  @TotalCountSql   nvarchar ( 500 ); 

sql2000和sql2005分页存储过程_Go

     Declare

  @SqlString   nvarchar ( 2000 );    

sql2000和sql2005分页存储过程_Go

     set

  @StartRecord   =  ( @PageIndex - 1 ) * @PageSize   +   1

sql2000和sql2005分页存储过程_Go

     set

  @EndRecord   =   @StartRecord   +   @PageSize   -   1  

sql2000和sql2005分页存储过程_Go

     SET

  @TotalCountSql =  N ' select @TotalRecord = count(*) from  '   +   @TableName ; -- 总记录数语句

sql2000和sql2005分页存储过程_Go

     SET   @SqlString   =  N ' (select row_number() over (order by  ' +   @OrderString   + ' ) as rowId, ' + @ReFieldsStr + '  from  ' +   @TableName ; -- 查询语句

sql2000和sql2005分页存储过程_Go

     --

sql2000和sql2005分页存储过程_Go

     IF  ( @WhereString !  =   ''   or   @WhereString != null )

sql2000和sql2005分页存储过程_Go

         BEGIN


sql2000和sql2005分页存储过程_Go

             SET

  @TotalCountSql = @TotalCountSql   +   '   where  ' +   @WhereString ;

sql2000和sql2005分页存储过程_Go

             SET

  @SqlString   = @SqlString +   '   where  ' +   @WhereString ;            

sql2000和sql2005分页存储过程_Go

         END


sql2000和sql2005分页存储过程_Go

     --

第一次执行得到

sql2000和sql2005分页存储过程_Go

     -- IF(@TotalRecord is null)

sql2000和sql2005分页存储过程_Go

     --    BEGIN

sql2000和sql2005分页存储过程_Go

            EXEC  sp_executesql  @totalCountSql ,N ' @TotalRecord int out ' , @TotalRecord  output; -- 返回总记录数

sql2000和sql2005分页存储过程_Go

     --   END

sql2000和sql2005分页存储过程_Go

     -- --执行主语句

sql2000和sql2005分页存储过程_Go

     set   @SqlString

举报

相关推荐

0 条评论