就下载 —— 安全下载、无毒手机软件、绿色软件官方下载网站最近更新|下载排行|热门标签|收藏本站

您现在的位置是:就下载 > IT资讯 > 软件教程 > 实现千万级数据的分页的通用存储过程

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)

上一篇:总有一个你想要!UC桌面部分犀利功能解析

本文地址:软件教程 >> http://www.9xz.net/it/ruanjianjiaocheng/20693.html

下一篇:从csv文件批量创建AD用户

  • 打印
推荐阅读
热门专题
推荐内容
热点内容