西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页西西教程数据库教程 → 实现千万级数据的分页的通用存储过程

实现千万级数据的分页的通用存储过程

相关软件相关文章发表评论 来源:caojinqin时间:2010/3/9 19:38:22字体大小:A-A+

作者:caojinqin点击:346次评论:0次标签: 分页

  • 类型:滤镜插件大小:3.7M语言:英文 评分:5.0
  • 标签:
立即下载

01 set ANSI_NULLS ON

02 set QUOTED_IDENTIFIER ON

03 go

04

05 /*

06 功能描述: 通用分页显示查询

07 如果有自增标识字段,在@strGetFields中不要加入此字段信息,

08 如果非要加入的话,要 (fldName + 0) AS fldName 这样处理;

09 输入参数:

10 @tblName: 表名

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

12 @PageSize: 页尺寸

13 @PageIndex: 页码

14 @doCount: 返回记录总数, 非 0 值则返回

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

16 格式: Field1 DESC, Field2 ASC

17 @strWhere: 查询条件,(注意: 不要加 WHERE)

18 输出参数: @RecordCount: 记录总数

19 作 者: Nestcn

20 创建时间: 2010-03-09

21 更改纪录:

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,就执行总数统计

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 --删除总数统计临时表

59 EXEC ('DROP TABLE tmpTable')

60 END

61

62 PRINT @RecordCount

63

64 --排序字段信息

65 IF (@strOrderBy != '')

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

67 --如果是第一页就执行以上代码,这样会加快执行速度

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 --为搜索表建立自动编号 保存到临时表中

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以真正执行的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 --执行分页查询

91 EXEC (@strSQL)

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)