手机版

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

时间:2021-08-08 来源:互联网 编辑:宝哥软件园 浏览:

类型:滤镜插件大小:3.7M语言:英文评分:5.0标签:立即下载01将ANSI_NULLS设置为开

02将报价标识符设置为开

去吧

04

05 /*

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

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

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

09 输入参数:

10 @tblName:表名

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

12 @PageSize:页尺寸

13 @PageIndex:页码

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

15 @ strOrderBy:排序字段信息,(注意: 不要加订单方)

16 格式: desc油田1,美国石油学会油田2

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

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

19 作者:Nestcn

20 创建时间: 2010-03-09

21 更改纪录:

22 */

23 ALTER PROJECt[dbo].[我的分页]

24 (

25 @tblName varchar(255),

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

27 @PageSize int=10,

28 @PageIndex int=1,

29 @doCount位=0,

30 @strOrderBy varchar(500)=' ',

31 @strWhere varchar(1500)=' ',

32 @RecordCount int输出

33 )

34自动化系统

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='如果存在(从dbo.sysobjects中选择*其中id=object _ id('[dbo]).[tmpTable]' ')和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=合计自表

57

58 - 删除总数统计临时表

59 EXEC ('DROP TABLE tmpTable ')

60 END

61

62 PRINT @RecordCount

63

64 - 排序字段信息

65 IF (@strOrderBy!='')

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

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

68中频(@页面索引=1)

69 BEGIN

70 IF (@strWhere!='')

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

72 ELSE

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

74 END

75 ELSE

76 BEGIN

77 - 为搜索表建立自动编号保存到临时表中

78 SET @ strSQL=' SELECT TOP ' str(@ page index * @ page size)' 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以真正执行的结构化查询语言代码

85 SET @ strSQL=@ strSQL ' SELECT ' @ strGetFields ' FROM # tmpTable WHERE IID ' str(@ page index-1)* @ page size)' DROP TABLE # tmpTable '

86 END

87

88 PRINT @strSQL

89

90 - 执行分页查询

91 EXEC (@strSQL)

版权声明:实现千万级数据的分页的通用存储过程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。