cAng^Er

          不懂我的人 , 離不了我 , 該了解了解我 !而懂我的人 , 更離不了我 , 因為他們愛我 。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 16 文章 :: 18 評論 :: 0 Trackbacks

          今天在網(wǎng)上看到了幾個解決sql2000的分頁查詢方法
          寫在這里(沒有測試)


          四種方法取表里n到m條紀(jì)錄:

          1.
          select top m * into 臨時表(或表變量) from tablename order by columnname -- 將top m筆插入
          set rowcount n
          select * from 表變量 order by columnname desc

          2.
          select top n * from
          (select top m * from tablename order by columnname) a
          order by columnname desc

          3.如果tablename里沒有其他identity列,那么:
          select identity(int) id0,* into #temp from tablename

          取n到m條的語句為:
          select * from #temp where id0 >=n and id0 <= m

          如果你在執(zhí)行select identity(int) id0,* into #temp from tablename這條語句的時候報錯,那是因為你的DB中間的select into/bulkcopy屬性沒有打開要先執(zhí)行:
          exec sp_dboption 你的DB名字,'select into/bulkcopy',true

          4.如果表里有identity屬性,那么簡單:
          select * from tablename where identitycol between n and m
          **********************************************
           *sql2000下 分頁存儲過程 **********************

          **********************************************

          SET
           QUOTED_IDENTIFIER OFF 
          GO
          SET ANSI_NULLS ON 
          GO
          --名稱:分頁存儲過程
          --
          使用示例 EXEC sp_PageIndex '*',' FROM StuSources ',2,10
          --
          注意 
          --
          目前還沒有對輸入的參數(shù)進行嚴(yán)格的驗證
          --
          默認(rèn)為輸入都是合法有效的

          ALTER  PROC sp_PageIndex
           
          @sqlSelect varchar(800--SELECT 后面 FROM 前面 的 字段 不用包含SELECT
          ,@sqlFrom varchar(800--FROM 后面 的 字段 包含F(xiàn)ROM
          ,@countPerPage int -- 每頁數(shù)據(jù)行數(shù)
          ,@toPage int --要轉(zhuǎn)到的頁碼

          AS

          BEGIN


          -- 根據(jù)每頁數(shù)據(jù)行數(shù) 和 要轉(zhuǎn)到的頁碼 得到 數(shù)據(jù)起止點
          Declare @start int
          Declare @end int

          set @end = @countPerPage * @toPage
          set @start = @countPerPage * (@toPage - 1+ 1


          -- 臨時表名稱 可隨機命名
          Declare @tmpTable varchar(10)
          SET @tmpTable ='#tmp'

          Declare @sqlStr varchar(800)
          -- 創(chuàng)建數(shù)據(jù)源到臨時表
          SELECT @sqlStr = 'SELECT Identity(int,1,1) AS RowIndex,'
          SELECT @sqlStr = @sqlStr + rtrim(@sqlSelect+ ' INTO  '+ @tmpTable 
          SELECT @sqlStr = @sqlStr + rtrim(@sqlFrom
          -- 查詢臨時表 得到所需要的數(shù)據(jù)
          SELECT @sqlStr = @sqlStr + ' '+'SELECT '+ rtrim(@sqlSelect+' FROM ' + @tmpTable 
          SELECT @sqlStr = @sqlStr + ' WHERE  RowIndex BETWEEN ' + Convert(char,@start+ " AND " + Convert(char,@end)
          -- 刪除臨時表
          SELECT @sqlStr = @sqlStr + ' '+'DROP TABLE '+@tmpTable
          EXEC (@sqlStr)


          END


          GO
          SET QUOTED_IDENTIFIER OFF 
          GO
          SET ANSI_NULLS ON 
          GO
          posted on 2007-01-18 10:00 cAng^Er 閱讀(2319) 評論(4)  編輯  收藏 所屬分類: |:數(shù) 據(jù) 庫:|

          評論

          # re: sql2000 分頁查詢 2007-01-18 20:49 劍事
          網(wǎng)上有完整的存儲過程可以用  回復(fù)  更多評論
            

          # re: sql2000 分頁查詢 2009-03-17 12:22 牛腩
          好是好,不過我在做的時候發(fā)現(xiàn)個問題..如果你是自己出錢買的空間的話,網(wǎng)上提供的MSSQL給你的賬號都設(shè)置了權(quán)限的,不能使用EXECUTE ...所以這個存儲過程如果是用于自己買的空間的話就不成了..唉...  回復(fù)  更多評論
            

          # re: sql2000 分頁查詢 2010-01-11 09:36 smallcol
          這種方式如果數(shù)據(jù)有100W條的話那不是很慢?
          光insert #tmp表都要好幾分鐘  回復(fù)  更多評論
            

          # re: sql2000 分頁查詢 2010-06-18 16:39 Mm
          最失敗的就是上面的分頁。。  回復(fù)  更多評論
            


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 盐城市| 南通市| 玉田县| 通渭县| 大城县| 洪雅县| 峨山| 呼和浩特市| 武平县| 安化县| 田阳县| 德保县| 乐亭县| 灵武市| 佛教| 兴义市| 霍山县| 阿鲁科尔沁旗| 蕉岭县| 武宣县| 新河县| 远安县| 正宁县| 黑河市| 团风县| 称多县| 霍林郭勒市| 巩留县| 阿荣旗| 靖江市| 衡南县| 洛扎县| 星座| 东台市| 临泉县| 高邮市| 佳木斯市| 梨树县| 和静县| 梁平县| 宝山区|