乐观 发表于 2015-1-16 22:15:11

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的成本和灵活性优势对小企业吸引力更大,他们是云数据库解决方案的重点客户群体。

精灵巫婆 发表于 2015-1-19 06:03:57

可以动态传入参数,省却了动态SQL的拼写。

因胸联盟 发表于 2015-1-24 23:26:26

可以动态传入参数,省却了动态SQL的拼写。

莫相离 发表于 2015-2-2 15:08:11

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

小妖女 发表于 2015-2-7 23:54:08

having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。

谁可相欹 发表于 2015-2-23 19:59:02

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

仓酷云 发表于 2015-3-7 10:18:03

只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。

只想知道 发表于 2015-3-14 23:04:49

对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。

简单生活 发表于 2015-3-21 16:28:13

如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
页: [1]
查看完整版本: MYSQL网站制作之SQLSERVER Pager store procedure分页存...