• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > SQL Server 2005通用分页存储过程及多表联接应用

SQL Server 2005通用分页存储过程及多表联接应用

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了sql分页,存储过程等相关知识,希望本文的分享对您有所帮助

分页存储过程在好多文章中都有介绍过;本篇是不久前写的一个分页存储过程,可应用于SQL Server 2005上面,感兴趣的朋友可以研究下,希望本文对你学习存储过程有所帮助

这是不久前写的一个分页存储过程,可应用于SQL Server 2005上面:
代码如下:
if object_ID('[proc_SelectForPager]') is not null
Drop Procedure [proc_SelectForPager]
Go
Create Proc proc_SelectForPager
(
@Sql varchar(max) ,
@Order varchar(4000) ,
@CurrentPage int ,
@PageSize int,
@TotalCount int output
)
As
/*Andy 2012-2-28 */
Declare @Exec_sql nvarchar(max)
Set @Exec_sql='Set @TotalCount=(Select Count(1) From ('+@Sql+') As a)'
Exec sp_executesql @Exec_sql,N'@TotalCount int output',@TotalCount output
Set @Order=isnull(' Order by '+nullif(@Order,''),' Order By getdate()')
if @CurrentPage=1 /*经常会调用第1页,这里做特殊处理,少一层子查询*/
Set @Exec_sql='
;With CTE_Exec As
(
'+@Sql+'
)
Select Top(@pagesize) *,row_number() Over('+@Order+') As r From CTE_Exec Order By r
'
Else
Set @Exec_sql='
;With CTE_Exec As
(
Select *,row_number() Over('+@Order+') As r From ('+@Sql+') As a
)
Select * From CTE_Exec Where r Between (@CurrentPage-1)*@pagesize+1 And @CurrentPage*@pagesize Order By r
'
Exec sp_executesql @Exec_sql,N'@CurrentPage int,@PageSize int',@CurrentPage,@PageSize
Go

调用方法:
1.单表:
代码如下:
Exec proc_SelectForPager @Sql = 'Select * from contacts a where a.ContactType=1', -- varchar(max)
@Order = '', -- varchar(4000)
@CurrentPage = 3, -- int
@PageSize = 20, -- int
@TotalCount = 0 -- int

2.多表联接:
代码如下:
Exec proc_SelectForPager @Sql =
'Select a.Staff,a.OU,b.FName+b.FName as Name
from staffOUHIST a
inner join Staff b on b.ID=a.Staff and a.ExpiryDate=''30001231''
', -- varchar(max)
@Order = '', -- varchar(4000)
@CurrentPage = 3, -- int
@PageSize = 20, -- int
@TotalCount = 0 -- int

注:在@Sql 中不能使用CTE。
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于mysql查询语句的使用详解
  • MySQL 百万级分页优化(Mysql千万级快速分页)
  • SQL语句详解 MySQL update的正确用法
  • mysql部分替换sql语句分享
  • mysql SQL语句积累
  • mysql 查询第几行到第几行记录的语句
  • mysql limit分页优化方法分享
  • 用SQL语句解决mysql导入大数据文件的问题
  • mysql删除重复记录语句的方法
  • mysql sql语句总结

相关文章

  • 2018-12-05 【ASP.NET Web API教程】1.1 第一个ASP.NET Web API
  • 2018-12-05关于Mysql存储引擎InnoDB和Myisam的六大区别讲解
  • 2018-12-05详解MySQL高可用MMM搭建方案及架构原理_MySQL
  • 2017-05-11mysql建库时提示Specified key was too long max key length is 1000 bytes的问题的解决方法
  • 2018-12-05关于mysql delete的问题小结
  • 2018-12-05SQLServer 2005系统配置要求官方说明
  • 2017-05-11在Mysql上创建数据表实例代码
  • 2018-12-05不同情况下的MySQL 的迁移方案(推荐)
  • 2017-05-11讲解MySQL中的事务特性
  • 2018-12-05有关排他锁的课程推荐10篇

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 带进度的SQL Server FileStream如何存取
    • ProC 连接Oracle代码
    • 配置MySQL GTID 主从复制
    • 实例讲解mysql修改开启允许远程连接
    • MySQL数据库的23个注意事项
    • mysql之delete删除记录后数据库大小不变_MySQL
    • sqlserver 千万数量级分页存储过程代码
    • MYSQL数据库连接偶尔连不上,几秒后又自动恢复
    • 详解mysql建立索引的使用办法及优缺点分析_MySQL
    • Mysql的主从服务器架构配置

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有