cAng^Er

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

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

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


          四種方法取表里n到m條紀錄:

          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

          如果你在執行select identity(int) id0,* into #temp from tablename這條語句的時候報錯,那是因為你的DB中間的select into/bulkcopy屬性沒有打開要先執行:
          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
          --
          注意 
          --
          目前還沒有對輸入的參數進行嚴格的驗證
          --
          默認為輸入都是合法有效的

          ALTER  PROC sp_PageIndex
           
          @sqlSelect varchar(800--SELECT 后面 FROM 前面 的 字段 不用包含SELECT
          ,@sqlFrom varchar(800--FROM 后面 的 字段 包含FROM
          ,@countPerPage int -- 每頁數據行數
          ,@toPage int --要轉到的頁碼

          AS

          BEGIN


          -- 根據每頁數據行數 和 要轉到的頁碼 得到 數據起止點
          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)
          -- 創建數據源到臨時表
          SELECT @sqlStr = 'SELECT Identity(int,1,1) AS RowIndex,'
          SELECT @sqlStr = @sqlStr + rtrim(@sqlSelect+ ' INTO  '+ @tmpTable 
          SELECT @sqlStr = @sqlStr + rtrim(@sqlFrom
          -- 查詢臨時表 得到所需要的數據
          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)  編輯  收藏 所屬分類: |:數 據 庫:|

          評論

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

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

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

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


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


          網站導航:
           
          主站蜘蛛池模板: 柘城县| 德清县| 溧水县| 壶关县| 青川县| 交口县| 宁蒗| 康保县| 东丽区| 平罗县| 蒲江县| 英德市| 崇仁县| 辉南县| 黄骅市| 菏泽市| 沙湾县| 通榆县| 梁河县| 大同市| 长岭县| 涪陵区| 海宁市| 武隆县| 沙河市| 鄂托克旗| 简阳市| 大姚县| 马鞍山市| 濮阳市| 青州市| 会同县| 吴川市| 福州市| 尚志市| 西宁市| 攀枝花市| 崇阳县| 中山市| 睢宁县| 墨江|