西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程數(shù)據(jù)庫教程 → 實(shí)現(xiàn)千萬級(jí)數(shù)據(jù)的分頁的通用存儲(chǔ)過程

實(shí)現(xiàn)千萬級(jí)數(shù)據(jù)的分頁的通用存儲(chǔ)過程

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:caojinqin時(shí)間:2010/3/9 19:38:22字體大。A-A+

作者:caojinqin點(diǎn)擊:346次評(píng)論:0次標(biāo)簽: 分頁

  • 類型:濾鏡插件大。3.7M語言:英文 評(píng)分:5.0
  • 標(biāo)簽:
立即下載

01 set ANSI_NULLS ON

02 set QUOTED_IDENTIFIER ON

03 go

04

05 /*

06 功能描述: 通用分頁顯示查詢

07 如果有自增標(biāo)識(shí)字段,在@strGetFields中不要加入此字段信息,

08 如果非要加入的話,要 (fldName + 0) AS fldName 這樣處理;

09 輸入?yún)?shù):

10 @tblName: 表名

11 @strGetFields: 需要返回的列 '*':返回所以列信息

12 @PageSize: 頁尺寸

13 @PageIndex: 頁碼

14 @doCount: 返回記錄總數(shù), 非 0 值則返回

15 @strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY)

16 格式: Field1 DESC, Field2 ASC

17 @strWhere: 查詢條件,(注意: 不要加 WHERE)

18 輸出參數(shù): @RecordCount: 記錄總數(shù)

19 作 者: Nestcn

20 創(chuàng)建時(shí)間: 2010-03-09

21 更改紀(jì)錄:

22 */

23 ALTER PROCEDURE [dbo].[MyPagination]

24 (

25 @tblName varchar(255),

26 @strGetFields varchar(1000) = '*',

27 @PageSize int = 10,

28 @PageIndex int = 1,

29 @doCount bit = 0,

30 @strOrderBy varchar(500) = '',

31 @strWhere varchar(1500) = '',

32 @RecordCount int output

33 )

34 AS

35 -- 主語句

36 DECLARE @strSQL varchar(5000) SET @strSQL = ''

37 -- 排序變量

38 DECLARE @strOrder varchar(400) SET @strOrder = ''

39

40 SET @RecordCount = 0

41 --如果@doCount傳遞過來的不是0,就執(zhí)行總數(shù)統(tǒng)計(jì)

42 IF (@doCount != 0)

43 BEGIN

44 DECLARE @sWhere varchar(2000)

45

46 SET @sWhere = ''

47 IF (@strWhere != '')

48 SET @sWhere = ' WHERE ' + @strWhere

49

50 SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) '

51 SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') '

52 SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere

53

54 EXEC (@strSQL)

55

56 SELECT @RecordCount=Total FROM tmpTable

57

58 --刪除總數(shù)統(tǒng)計(jì)臨時(shí)表

59 EXEC ('DROP TABLE tmpTable')

60 END

61

62 PRINT @RecordCount

63

64 --排序字段信息

65 IF (@strOrderBy != '')

66 SET @strOrder = ' ORDER BY ' + @strOrderBy

67 --如果是第一頁就執(zhí)行以上代碼,這樣會(huì)加快執(zhí)行速度

68 IF (@PageIndex = 1)

69 BEGIN

70 IF (@strWhere != '')

71 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder

72 ELSE

73 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM ['+ @tblName + '] '+ @strOrder

74 END

75 ELSE

76 BEGIN

77 --為搜索表建立自動(dòng)編號(hào) 保存到臨時(shí)表中

78 SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']'

79 IF (@strWhere != '')

80 SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder

81 ELSE

82 SET @strSQL = @strSQL + @strOrder

83

84 --以下代碼賦予了@strSQL以真正執(zhí)行的SQL代碼

85 SET @strSQL = @strSQL + ' SELECT ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'

86 END

87

88 PRINT @strSQL

89

90 --執(zhí)行分頁查詢

91 EXEC (@strSQL)

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)