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 
     
     
  • 相关阅读:
    HTML元素解释
    Java命名规范
    HDU 1058 Humble Numbers(DP,数)
    HDU 2845 Beans(DP,最大不连续和)
    HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
    HDU 2870 Largest Submatrix(DP)
    HDU 1421 搬寝室(DP)
    HDU 2844 Coins (组合背包)
    HDU 2577 How to Type(模拟)
    HDU 2159 FATE(二维完全背包)
  • 原文地址:https://www.cnblogs.com/hq2008/p/830795.html
Copyright © 2011-2022 走看看