SQLServer2005通用分页存储过程及多表联接应用
2023-06-13 09:14:44 时间
这是不久前写的一个分页存储过程,可应用于SQLServer2005上面:
复制代码代码如下:
ifobject_ID("[proc_SelectForPager]")isnotnull
DropProcedure[proc_SelectForPager]
Go
CreateProcproc_SelectForPager
(
@Sqlvarchar(max),
@Ordervarchar(4000),
@CurrentPageint,
@PageSizeint,
@TotalCountintoutput
)
As
/*Andy2012-2-28*/
Declare@Exec_sqlnvarchar(max)
Set@Exec_sql="Set@TotalCount=(SelectCount(1)From("+@Sql+")Asa)"
Execsp_executesql@Exec_sql,N"@TotalCountintoutput",@TotalCountoutput
Set@Order=isnull("Orderby"+nullif(@Order,""),"OrderBygetdate()")
if@CurrentPage=1/*经常会调用第1页,这里做特殊处理,少一层子查询*/
Set@Exec_sql="
;WithCTE_ExecAs
(
"+@Sql+"
)
SelectTop(@pagesize)*,row_number()Over("+@Order+")AsrFromCTE_ExecOrderByr
"
Else
Set@Exec_sql="
;WithCTE_ExecAs
(
Select*,row_number()Over("+@Order+")AsrFrom("+@Sql+")Asa
)
Select*FromCTE_ExecWhererBetween(@CurrentPage-1)*@pagesize+1And@CurrentPage*@pagesizeOrderByr
"
Execsp_executesql@Exec_sql,N"@CurrentPageint,@PageSizeint",@CurrentPage,@PageSize
Go
调用方法:
1.单表:
Execproc_SelectForPager@Sql="Select*fromcontactsawherea.ContactType=1",--varchar(max)
@Order="",--varchar(4000)
@CurrentPage=3,--int
@PageSize=20,--int
@TotalCount=0--int
2.多表联接:
Execproc_SelectForPager@Sql=
"Selecta.Staff,a.OU,b.FName+b.FNameasName
fromstaffOUHISTa
innerjoinStaffbonb.ID=a.Staffanda.ExpiryDate=""30001231""
",--varchar(max)
@Order="",--varchar(4000)
@CurrentPage=3,--int
@PageSize=20,--int
@TotalCount=0--int
注:在@Sql中不能使用CTE。
相关文章
- R语言分布滞后非线性模型(DLNM)空气污染研究温度对死亡率影响建模应用|附代码数据
- 一个用基于Java语言编写的词法分析器代码的自动生成程序,模仿lex程序的需求应用设计 DokymeLex
- 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )
- 开源应用中心 | KodExplorer高效流畅云端存储&协同办公新体验
- MySQL中的存储过程及其应用(mysql有没有存储过程)
- MySQL简单应用实例:怎样才能更好的应用?(mysql简单案例)
- MySQL存储过程简介及应用举例(mysqlproc)
- MySQL存储过程详解:优势与应用(mysql存储过程是什么)
- 深入理解Linux静态存储区:原理、应用及优化方法(linux静态存储区)
- SQL Server表行锁技术的优势及应用(sqlserver表行锁)
- Linux应用的广泛应用领域(linux应用领域)
- 将原子技术应用于 Linux 操作系统(atomic linux)
- MSSQL的存储过程:简介与应用(mssql的存储过程包括)
- MySQL中存储URL字符串的方式及应用探究(mysql中url字符串)
- MySQL中int数据类型的取值范围及应用(mysql中int的范围)
- 构建即时通讯应用基于Redis存储聊天记录(聊天记录redis 存储)
- 优化数据管理MySQL在企业数据存储中的应用场景(mysql一试用场景)
- TP5应用Redis实现快速高效稳定存储(tp5 应用redis)
- Redis中存储数据的过期时间应用场景(redis过期时间场景)
- ASP开发中存储过程应用全接触
- Oracle存储过程总结(一、基本应用)
- web基于浏览器的本地存储方法应用