开发者社区> 科技探索者> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

sql server 分页存储过程

简介:
+关注继续查看

sql server 分页存储过程,在网上找了很多,但是都不能用或者不能很好的用,特别综合大家的智慧,自己写了一个,而且通过visual studio调试,通过实际数据测试


  1. set ANSI_NULLS ON

  2. set QUOTED_IDENTIFIER ON

  3. go

  4. ALTERPROCEDURE [dbo].[proc_ListPage]

  5. (

  6. @tblName varchar(max), ----要显示的表或多个表的连接

  7. @fldName nvarchar(2000) , ----要显示的字段列表

  8. @pageSize int----每页显示的记录个数

  9. @page int----要显示那一页的记录

  10. @pageCount int = 1 output----查询结果分页后的总页数

  11. @Counts int = 1 output----查询到的记录数

  12. @strCondition nvarchar(1000) = null----查询条件,不需where

  13. @ID nvarchar(150), ----主表的主键

  14. @Dist bit = 0 ----是否添加查询字段的 DISTINCT 默认0不添加/1添加

  15. )

  16. AS

  17. SET NOCOUNT ON

  18. Declare @sqlTmp nvarchar(max----存放动态生成的SQL语句

  19. Declare @strTmp nvarchar(max----存放取得查询结果总数的查询语句

  20. Declare @strID nvarchar(1000) ----存放取得查询开头或结尾ID的查询语句

  21. /*Declare @strSortType nvarchar(500) ----数据排序规则A

  22. Declare @strFSortType nvarchar(500) ----数据排序规则B*/

  23. Declare @SqlSelect nvarchar(500) ----对含有DISTINCT的查询进行SQL构造

  24. Declare @SqlCounts nvarchar(500) ----对含有DISTINCT的总数查询进行SQL构造

  25. if @Dist = 0

  26. begin

  27. set @SqlSelect = 'select '

  28. set @SqlCounts = 'Count(*)'

  29. end

  30. else

  31. begin

  32. set @SqlSelect = 'select distinct '

  33. set @SqlCounts = 'Count(DISTINCT '+@ID+')'

  34. end

  35. --------生成查询语句--------

  36. --此处@strTmp为取得查询结果数量的语句

  37. if @strCondition isnullor @strCondition=''--没有设置显示条件

  38. begin

  39. set @sqlTmp = @fldName + ' From ' + @tblName

  40. set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName

  41. set @strID = ' From ' + @tblName

  42. end

  43. else

  44. begin

  45. set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition

  46. set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition

  47. set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition

  48. end

  49. ----取得查询结果总数量-----

  50. exec sp_executesql @strTmp,N'@Counts int out ',@Counts out

  51. declare @tmpCounts int

  52. if @Counts = 0

  53. set @tmpCounts = 1

  54. else

  55. set @tmpCounts = @Counts

  56. --取得分页总数

  57. set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize

  58. /**//**当前页大于总页数 取最后一页**/

  59. if @page>@pageCount

  60. set @page=@pageCount

  61. --/*-----数据分页2分处理-------*/

  62. declare @pageIndex int--总数/页大小

  63. declare @lastcount int--总数%页大小

  64. set @pageIndex = @tmpCounts/@pageSize

  65. set @lastcount = @tmpCounts%@pageSize

  66. if @lastcount > 0

  67. set @pageIndex = @pageIndex + 1

  68. else

  69. set @lastcount = @pagesize

  70. --//***显示分页

  71. if @strCondition isnullor @strCondition=''--没有设置显示条件

  72. begin

  73. set @sqlTmp =@SqlSelect+' top 'CAST(@pageSize asVARCHAR(4))+' '+ @fldName+' from '+@tblName

  74. +' where '+@ID+' not in('+ @SqlSelect+' top 'CAST(@pageSize*(@page-1) asVarchar(20)) +' '+ @ID +' from '+@tblName

  75. +' order by '' '+ @ID+')'

  76. +' order by '' '+ @ID

  77. end

  78. else--有查询条件

  79. begin

  80. set @sqlTmp =@SqlSelect+' top 'CAST(@pageSize asVARCHAR(4))+' '+ @fldName +' from '+@tblName

  81. +' where '+@ID+' not in('+ @SqlSelect+' top 'CAST(@pageSize*(@page-1) asVarchar(20)) +' '+ @ID +' from '+@tblName

  82. +' Where (1>0) ' + @strCondition + ' order by '' '+ @ID +')'

  83. +' ' + @strCondition + ' order by '' '+ @ID

  84. end

  85. ------返回查询结果-----

  86. exec sp_executesql @sqlTmp

  87. print @strTmp

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/603486如需转载请自行联系原作者

yaocoder

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
初识 Sql Server存储过程
开篇语 之前的公司并未使用存储过程来做项目,所以小生对存储过程的调用、使用也是一知半解,刚好这家公司就大量用到了存储过程 这次做的功能,为了保持风格一致,也是需要使用存储过程来实现动态sql和数据分页 下面一起来看看如何实现的吧(小白一枚,不喜勿喷,请轻拍)~ 调用存储过程(其中condit...
755 0
sqlServer存储过程
1、创建存储过程报错:     'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。 解决方法: use databaseName 后面要加上一句: GO ...
776 0
SQL Server基础之<存储过程>
原文:SQL Server基础之   简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理。本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作。
1418 0
SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ]   [ WITH     { RECOMPILE | ENCRY
1576 0
Sql Server 存储过程基础
        将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。       存储过程的优点:        1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度
956 0
SQL Server 存储过程
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念     存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
715 0
5487
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载