posts - 5,  comments - 5,  trackbacks - 0
          CREATE PROCEDURE dbo.GetPagingRecord
              (
                  @tablename varchar(100),--表名或視圖表
                  @fieldlist varchar(4000)='*',--欲選擇字段列表
                  @orderfield varchar(100),--排序字段
                  @keyfield varchar(100),--主鍵
                  @pageindex int,--頁號,從1開始
                  @pagesize int=20,--頁尺寸
                  @strwhere varchar(4000),--條件
                  @ordertype varchar(1)='1'--排序,1,降序,0,升序
              )
          AS

              SET NOCOUNT ON
              declare @sqlstr varchar(6000)
              declare @orderstr varchar(100)
              if(@keyfield=@orderfield)
              begin
           set @orderstr = ''
              end
              else
              begin
           set @orderstr = ','+@keyfield+' asc'
              end
              if @pageindex<=0
           set @pageindex=1
              --處理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-1 as varchar)+'*'+cast(@Pagesize as varchar)+';'
              set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@PageIndex 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 1=1 '+@strwhere+' order by '+@orderfield+' desc' + @orderstr+') as a where 1=1 and '+@keyfield+' not in ( 
           
          select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where 1=1 '+@strwhere+' 
           
          order by '+@orderfield +' desc'+ @orderstr +') order by ' + @orderfield +' desc'';'
              end
              else
              begin
              set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from 
           
          '+@tablename+'  where 1=1 '+@strwhere+' order by '+@orderfield+' asc' + @orderstr+' ) as a where 1=1 and '+@keyfield+' not in ( 
           
          select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where 1=1 '+@strwhere+' 
           
          order by '+@orderfield +' asc' + @orderstr+') order by '+@orderfield +' asc'';'
              end
              set @sqlstr=@sqlstr+'execute( @sqlstr)'
              print @sqlstr
          execute(@sqlstr)
          GO

          posted on 2007-07-06 08:54 曾科 閱讀(222) 評論(0)  編輯  收藏 所屬分類: SQL

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          .net

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 拉孜县| 禹城市| 温州市| 宁河县| 南投县| 胶南市| 达孜县| 彭水| 仙游县| 温泉县| 平顺县| 司法| 仪征市| 天峻县| 岫岩| 中卫市| 陆河县| 永州市| 邓州市| 霍州市| 金秀| 聂拉木县| 资中县| 邻水| 巴东县| 海林市| 安龙县| 江西省| 千阳县| 丹阳市| 北流市| 涞水县| 荔波县| 大名县| 即墨市| 双桥区| 泽库县| 黄龙县| 昭苏县| 务川| 沙湾县|