zoukankan      html  css  js  c++  java
  • page procedures

    EXEC XK_Counter_UpdateEveryDayRankTempTable
    sp_helptext XK_Counter_UpdateEveryDayRankTempTable

    select getdate()
    exec GetPagingData 
    'article','*','UpdateTime','id',1,20,'1=1',1
    select getdate()
    select getdate()
    exec GZ_News_GetSQLSearchResults 
    20,1,''
    select getdate()

    sp_helptext GZ_News_GetSQLSearchResults
     
    -------------------------以下为临时表分页存储过程(不会有排序字段的影响)--------------------------------------------------------
    CREATE     PROCEDURE GZ_News_GetSQLSearchResults   
    (  
       
     @PageSize 
    int,  
     @PageIndex 
    int,   
            @Content varchar(
    20)  
    )  
    AS  
     SET NOCOUNT ON  
      
     DECLARE @PageLowerBound 
    int  
     DECLARE @PageUpperBound 
    int  
     DECLARE @RowsToReturn 
    int  
     DECLARE @MoreRecords 
    int  
       
      
     SET @RowsToReturn 
    = @PageSize * @PageIndex  
     SET @MoreRecords 
    = @RowsToReturn + 1  
     SET ROWCOUNT @MoreRecords  
      
      
     SET @PageLowerBound 
    = @PageSize * (@PageIndex-1)  
     SET @PageUpperBound 
    = @PageLowerBound + @PageSize + 1  
      
     CREATE TABLE #PageIndex   
     (  
      IndexID 
    int IDENTITY (11) NOT NULL,  
      UpdateTime datetime,  
                    ArticleID 
    int  
     )  
      
      
            
    if((@Content is not null) and (@Content<>''))   
      INSERT INTO #PageIndex (ArticleID,UpdateTime)   
     (SELECT ArticleID,UpdateTime FROM Article a WHERE Contains(Content, @Content)  
                    union   
                    SELECT ArticleID,UpdateTime FROM Article a where Contains(Title,@Content))   ORDER BY UpdateTime Desc   
      
            
    else   
                    INSERT INTO #PageIndex(ArticleID)  
                    SELECT ArticleID  FROM Article a Order By UpdateTime desc  
      
            
    /*IF (@MoreRecords > (SELECT count(*) FROM #PageIndex))  
      SET @MoreRecords = @RowsToReturn
    */  
      
     SELECT  
      a.ArticleID,  
                    a.Title,  
                    a.UpdateTime,  
                    a.Content,  
                    a.IncludePic,  
                    a.DefaultPicUrl,  
                    a.CopyFrom  
        
     FROM   
      #PageIndex PageIndex,  
      Article a  
        
     WHERE   
      a.ArticleID 
    = PageIndex.ArticleID AND  
      PageIndex.IndexID 
    > @PageLowerBound AND  
      PageIndex.IndexID 
    < @PageUpperBound  
     ORDER BY   
      PageIndex.IndexID  
      
      
     SET NOCOUNT OFF
    -----------------------------------------------------------排序类型----------------------------------------------------------------------

    drop proc getpagingdata
    create PROCEDURE dbo.GetPagingData 
        ( 
            @tablename varchar(
    100),--表名或视图表 
            @fieldlist varchar(
    4000)='*',--欲选择字段列表 
            @orderfield varchar(
    100),--排序字段 
            @keyfield varchar(
    100),--主键 
            @pageindex 
    int,--页号,从0开始 
            @pagesize 
    int=20,--页尺寸 
            @strwhere varchar(
    4000),--条件 
            @ordertype bit
    =1--排序,1,降序,0,升序 
        ) 
    AS 
        SET NOCOUNT ON 
        declare @sqlstr varchar(
    6000
        
    --处理SQL中危险字符,并且将条件处理成易嵌入的形式     
        
    set @sqlstr='declare @Rcount int;' 
      
    --  set @sqlstr=@sqlstr+'set @rcount=(select count('+@keyfield+') from '+@tablename+' where '+@strWhere+');'  
        
    set @sqlstr=@sqlstr+'set @rcount=1000'   
        
    set @strwhere=replace(@strwhere,'''',''''''
        
    set @strwhere=replace(@strwhere,'--',''
        
    set @strwhere=replace(@strwhere,';',''
        
    set @sqlstr=@sqlstr+'declare @Rnum int;' 
        
    set @sqlstr=@sqlstr+'set @rnum=@rcount-'+cast(@pagesize as varchar)+'*'+cast(@pageindex as varchar)+';' 
        
    set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);' 
        
    if @ordertype=1 
        begin 
        
    set @sqlstr=@sqlstr+'set @sqlstr=''select top '+cast(@Pagesize as varchar)+' '+@fieldlist+' from (select top 100  
     
    percent 
    * from  (select top  ''+cast(@rnum as varchar)+'' * from '+@tablename+' where '+@strwhere+'  
     
    order by 
    '+@orderfield+' asc) as b order by UpdateTime desc) as a order by '+@orderfield+' desc '';' 
        end 
        
    else 
        begin 
        
    set @sqlstr=@sqlstr+'set @sqlstr=''select top '+cast(@Pagesize as varchar)+' '+@fieldlist+' from (select top 100  
     
    percent 
    * from  (select top  ''+cast(@rnum as varchar)+'' * from '+@tablename+' where '+@strwhere+'  
     
    order by 
    '+@orderfield+' desc) as b order by UpdateTime asc) as a order by '+@orderfield+' asc '';' 
        end 
        
    set @sqlstr=@sqlstr+'if @Rcount>0 begin execute(@sqlstr) end'     
       print @sqlstr 
        execute(@sqlstr)
    go
     
     

    -------------------------------------------------not in ---------------------------------------------------------------------
    select getdate()
    exec GetPagingRecord_notin 
    'article','*','UpdateTime','id',0,20,'1=1',1
    select getdate()
    create PROCEDURE dbo.GetPagingRecord_notin 
        ( 
            @tablename varchar(
    100),--表名或视图表 
            @fieldlist varchar(
    4000)='*',--欲选择字段列表 
            @orderfield varchar(
    100),--排序字段 
            @keyfield varchar(
    100),--主键 
            @pageindex 
    int,--页号,从0开始 
            @pagesize 
    int=20,--页尺寸 
            @strwhere varchar(
    4000),--条件 
            @ordertype bit
    =1--排序,1,降序,0,升序 
        ) 
    AS 
     SET NOCOUNT ON 
        declare @sqlstr varchar(
    6000
        
    --处理SQL中危险字符,并且将条件处理成易嵌入的形式 
        
    set @strwhere=replace(@strwhere,'''',''''''
        
    set @strwhere=replace(@strwhere,'--',''
        
    set @strwhere=replace(@strwhere,';',''
        
    set @sqlstr='declare @CurPageNum int;' 
        
    set @sqlstr=@sqlstr+'declare @nextpagenum int;' 
        
    set @sqlstr=@sqlstr+'set @curpagenum='+cast(@PageIndex as varchar)+'*'+cast(@Pagesize as varchar)+';' 
        
    set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@PageIndex+1 as varchar)+'*'+cast(@Pagesize as varchar)+';' 
        
    set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);' 
        
    if @ordertype=1 
        begin 
        
    set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from  
     
    '+@tablename+'  where '+@strwhere+' order by '+@orderfield+' desc ) as a where '+@keyfield+' not in (  
     
    select top 
    ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'  
     
    order by 
    '+@orderfield+' desc) order by '+@orderfield+' desc'';' 
        end 
        
    else 
        begin 
        
    set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from  
     
    '+@tablename+'  where '+@strwhere+' order by '+@orderfield+' asc ) as a where '+@keyfield+' not in (  
     
    select top 
    ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'  
     
    order by 
    '+@orderfield+' asc) order by '+@orderfield+' asc'';' 
        end 
        
    set @sqlstr=@sqlstr+'execute( @sqlstr)' 
        
    --print @sqlstr 
        execute(@sqlstr) 
    ------------------------------------------ 目前最好的存储过程 ----------------------------------------------------------------------

    select getdate()
    exec proc_pagination 
    'ARTICLE','*','UpdateTime',20,1,0,1,''
    select getdate()
     
    CREATE    PROCEDURE proc_pagination(
     @tblName   varchar(
    255),       -- 表名
     @strGetFields varchar(
    1000= '*',  -- 需要返回的列 
     @fldName varchar(
    255)='',      -- 排序的字段名
     @PageSize   
    int = 10,          -- 页尺寸
     @PageIndex  
    int = 1,           -- 页码
     @doCount  bit 
    = 0,   -- 返回记录总数, 非 0 值则返回
     @OrderType bit 
    = 0,  -- 设置排序类型, 非 0 值则降序
     @strWhere  varchar(
    1500= ''  -- 查询条件 (注意: 不要加 where)
    ) AS
     
    set nocount on
     declare @strSQL   varchar(
    5000)       -- 主语句
     declare @strTmp   varchar(
    110)        -- 临时变量
     declare @strOrder varchar(
    400)        -- 排序类型
     
     
    if @doCount != 0
       begin
         
    if @strWhere !=''
          
    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere
         
    else
          
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
      end  
     
    --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
     
    else
     begin
      
    if @OrderType != 0
      begin
          
    set @strTmp = '<(select min'
       
    set @strOrder = ' order by [' + @fldName +'] desc'
       
    --如果@OrderType不是0,就执行降序,这句很重要!
      end
      
    else
      begin
          
    set @strTmp = '>(select max'
          
    set @strOrder = ' order by [' + @fldName +'] asc'
      end
      
    if @PageIndex = 1
      begin
          
    if @strWhere != ''   
           
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
       
    else
           
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['+ @tblName + ''+ @strOrder
       
    --如果是第一页就执行以上代码,这样会加快执行速度
      end
      
    else
      begin
       
    --以下代码赋予了@strSQL以真正执行的SQL代码
       
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['
           
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
       
    if @strWhere != ''
          
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['
              
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
              
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
              
    + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
              
    + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
      end 
     end   
     exec (@strSQL)
     
    set nocount off 
     
     
  • 相关阅读:
    MMDrawerController(第三方类库)侧边栏的使用
    NSString 字符串的一些操作
    AVAudioPlayer实现音乐播放(AFSoundManager的简单介绍)
    歌词同步小控件
    豆瓣FM音乐播放器
    SDWebImage的简单使用
    用系统图标创建UITabBarController
    LeetCode 树(N叉树遍历和二叉树遍历及其他)
    《汇编语言》——王爽 第15章 外中断
    《汇编语言》——王爽 第14章 端口
  • 原文地址:https://www.cnblogs.com/hq2008/p/830795.html
Copyright © 2011-2022 走看看