zoukankan      html  css  js  c++  java
  • 整理了一个Sql sever 2005下通用的分页储存过程

     1 -- CTE 分页
     2 -- 支持多表级联 , 指定字段输出 , 多表多字段复杂排序与过滤
     3 -- 原理是把 每条记录加上了分页的页码,然后按页面去读取
     4 -- 按照@StrConditions筛选和@StrOrder排序 使用ROW_NUMBER()得出 rowid 
     5 -- rowid / PageSize = 当前记录的所在页码 , 加入当前记录
     6 
     7 CREATE PROCEDURE [dbo].[sp_CTE](    
     8     @TableName varchar(500) ,    --TableName
     9     @TableFeilds varchar(2000=' * ',    --TableFeilds default * 
    10     @PageSize int ,        --PageSize
    11     @PageIndex int  ,    --PageIndex 
    12     @OrderColumName varchar(1000= null,      --Order  default null
    13     @IsAsc bit = 1  ,    -- ASC : 1 / DESC : 0 , if OderColumName(prior) is empty then order by @PK @IsAsc
    14     @PK varchar(100) ,        -- PK 
    15     @Conditions varchar(1000= null    --where default null
    16 )
    17 AS
    18     SET NOCOUNT ON;
    19 
    20     declare @StrSql nvarchar(4000)  
    21     declare @StrOrder nvarchar(1000)
    22     declare @StrCte nvarchar(3000)
    23     declare @StrConditions nvarchar(1000)
    24    
    25    -- Oder by 
    26    if(@OrderColumName is null or @OrderColumName = '')
    27        begin 
    28             -- PK ASC/DESC
    29             if @IsAsc = 1
    30                 set @StrOrder = ' order by ' + @PK + ' asc'
    31             else
    32                 set @StrOrder = ' order by ' + @PK + ' desc'        
    33         end
    34    else
    35         set @StrOrder = ' order by ' + @OrderColumName
    36     
    37     -- Where
    38     if (@Conditions is Not null And @Conditions <>'')
    39         set @StrConditions=' where ' + @Conditions
    40     else
    41         set @StrConditions=''
    42 
    43     -- CTE
    44     set @StrCte ='with Table_CET
    45     as
    46     (
    47         select 
    48             CEILING(
    49                     (ROW_NUMBER() OVER (' + @StrOrder + '))/' + str(@PageSize+ '
    50                    ) as page_num, '+ @TableFeilds+' 
    51         from ' + @TableName + @StrConditions +  ' 
    52     )
    53     ';
    54 
    55     set @StrSql = @StrCte + 'select * from Table_CET where page_num = ' + str(@PageIndex) ;
    56     
    57     -- debug
    58     print @StrSql 
    59 
    60     -- exec sql
    61     begin
    62     exec sp_executesql @StrSql;
    63     end
    64 

    --------------------------------------------------------------------------
    Daniel Chow's Blog - 不管你在哪里,都要有一颗创业的心!
    http://www.cnblogs.com/DanielChow/
  • 相关阅读:
    测试面试题集锦(一)| 软件测试常见必考问题与流程篇(附答案)
    测试开发赏金内推 | BAT 最新高薪急聘岗位,名企测试负责人等你来面!
    Xbox分辨率突然变成640p
    UWP 自定义密码框控件
    前端笔记(Antd将组件设置国际化中文)
    【数据结构与算法】背包问题总结梳理
    Redis网络模型的源码分析
    [MOOC-Java]1.2.1用变量做计算
    [MOOC-Java]1.1.2第一个程序
    [MOOC-Java]1.1.1开发环境配置
  • 原文地址:https://www.cnblogs.com/DanielChow/p/CET_Split.html
Copyright © 2011-2022 走看看