MYSQL网站制作之SQLSERVER Pager store procedure分页存...
DBaaS解决方案既可以解决这些问题,又能为客户节约资金。相反作为解决方案提供商,采用DBaaS模式似乎就并不那么有吸引力了,因为与企业内部署软件的解决方案相比,DBaaS意味着更低的利润。复制代码代码以下:SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATEPROCEDURE.
@Pageint=1,--以后页码
@PageSizeint=10,--每页纪录条数(页面巨细)
@Tablenvarchar(500),--表名或视图名,乃至能够是嵌套SQL:(Select*FromTabWhereID>1000)Tab
@Fieldnvarchar(800)=*,--前往纪录集字段名,","离隔,默许是"*"
@OrderBynvarchar(100)=IDASC,--排序划定规矩
@Filternvarchar(500),--过滤前提
@MaxPagesmallintoutput,--实行了局-1error,0false,maxpagetrue
@TotalRowintoutput,--纪录总数/*2007-07-1222:11:00update*/
@Descriptvarchar(100)output--了局形貌
AS
BEGIN
--=============================================
--Author:Jimmy.Yu
--Createdate:2007-5-11
--Description:SQL2005以上版本通用分页存储历程
--=============================================
SetROWCOUNT@PageSize;
Set@Descript=successful;
-------------------参数检测----------------
IFLEN(RTRIM(LTRIM(@Table)))!>0
Begin
Set@MaxPage=0;
Set@Descript=tablenameisempty;
Return;
End
IFLEN(RTRIM(LTRIM(@OrderBy)))!>0
Begin
Set@MaxPage=0;
Set@Descript=orderisempty;
Return;
End
IFISNULL(@PageSize,0)<=0
Begin
Set@MaxPage=0;
Set@Descript=pagesizeerror;
Return;
End
IFISNULL(@Page,0)<=0
Begin
Set@MaxPage=0;
Set@Descript=pageerror;
Return;
End
-------------------检测停止----------------
BeginTry
--整合SQL
Declare@SQLnvarchar(4000),@Portionnvarchar(4000);
Set@Portion=ROW_NUMBER()OVER(ORDERBY+@OrderBy+)ASROWNUMFROM+@Table;
Set@Portion=@Portion+(CASEWHENLEN(@Filter)>=1THEN(Where+@Filter+)AStab)ELSE()AStab)END);
Set@SQL=SelectTOP(+CAST(@PageSizeASnvarchar(8))+)+@Field+FROM(Select+@Field+,+@Portion;
Set@SQL=@SQL+Wheretab.ROWNUM>+CAST((@Page-1)*@PageSizeASnvarchar(8));
--实行SQL,取以后页纪录集
Execute(@SQL);
--------------------------------------------------------------------
--整合SQL
Set@SQL=Set@Rows=(SelectMAX(ROWNUM)FROM(Select+@Portion+);
--实行SQL,取最年夜页码
Executesp_executesql@SQL,N@Rowsintoutput,@TotalRowoutput;
Set@MaxPage=(CASEWHEN(@TotalRow%@PageSize)0THEN(@TotalRow/@PageSize+1)ELSE(@TotalRow/@PageSize)END);
EndTry
BeginCatch
--捕获毛病
Set@MaxPage=-1;
Set@Descript=errorline:+CAST(ERROR_LINE()ASvarchar(8))+,errornumber:+CAST(ERROR_NUMBER()ASvarchar(8))+,errormessage:+ERROR_MESSAGE();
Return;
EndCatch;
--实行乐成
Return;
END
绝对应的页面逻辑中写的对应挪用该存储历程的办法(C#)DBaaS解决方案可以降低首次投入成本,对于那些小企业来说,他们往往认为内部部署的数据库成本太高,DBaaS的成本和灵活性优势对小企业吸引力更大,他们是云数据库解决方案的重点客户群体。 可以动态传入参数,省却了动态SQL的拼写。 可以动态传入参数,省却了动态SQL的拼写。 其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?! having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。 sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西 只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。 对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。 如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
页:
[1]