仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 859|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之SQLSERVER Pager store procedure分页存...

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 16:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表