仓酷云

标题: MYSQL网站制作之SQLSERVER Pager store procedure分页存... [打印本页]

作者: 乐观    时间: 2015-1-16 22:15
标题: MYSQL网站制作之SQLSERVER Pager store procedure分页存...
DBaaS解决方案既可以解决这些问题,又能为客户节约资金。相反作为解决方案提供商,采用DBaaS模式似乎就并不那么有吸引力了,因为与企业内部署软件的解决方案相比,DBaaS意味着更低的利润。复制代码代码以下:
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO

CREATEPROCEDURE[dbo].[Pagination]
@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
可以动态传入参数,省却了动态SQL的拼写。
作者: 因胸联盟    时间: 2015-1-24 23:26
可以动态传入参数,省却了动态SQL的拼写。
作者: 莫相离    时间: 2015-2-2 15:08
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
作者: 小妖女    时间: 2015-2-7 23:54
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
作者: 谁可相欹    时间: 2015-2-23 19:59
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
作者: 仓酷云    时间: 2015-3-7 10:18
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
作者: 只想知道    时间: 2015-3-14 23:04
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
作者: 简单生活    时间: 2015-3-21 16:28
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2