海妖 发表于 2015-1-16 22:28:54

MSSQL教程之多范例营业处置计划技能

一个语句分成两个event(实际上不止,其他可以忽略),一个table_mapevent和一个Rows_log_event。Table_mapevent是一样的,主要看Rows_log_event。技能|计划
在企业使用开辟中常常会呈现多范例营业处置事情,一种好的计划办法会给使用和保护带来很年夜的收益,我们从一个复杂的案例入手下手提及。

一个图书发卖体系在客户付款结算处置:

客户分类:一般消耗者、一样平常会员、VIP会员、其他范例待定。

处置请求:一般消耗者不享用优惠

一样平常会员享用9.5折优惠

VIP会员享用8折优惠,外加累计积分

其他范例待定

上面就到详细完成了,在完成的时分我们年夜多半人城市想到给结算操纵编写一个办法(函数),在函数中我们会如许写:

Stringls_Customer_Type

Doubleld_Payment

//作废费者范例

ls_Customer_Type=..............

ifls_Customer_Type=Gthen//一般消耗者

//处置历程

elseifls_Customer=V//VIP消耗者

//处置历程

elseif

.....

endif

//其他处置

returnld_Payment

大概利用choosecase来取代ifelseif语句,布局会倾斜些。

如许的处置办法,关于调式、浏览、和今后新范例的增添都不小气便。假设每个范例的处置都有良多行代码(几十行到上百行),人人在浏览的时分对照舒服了,再增添一个新的范例就必要修正该办法,代码会更长,每一个处置利用的变量也很简单呈现交织,程序容错变得坚苦。

面临以上成绩,我的计划办法是为每品种型独自创立一个办法,都供应一个不异的接口,再者还必要一个办法来吸收哀求和前往了局。如许,不管在调试仍是运转的时分都很明晰,一个办法对应一个处置,增添新的范例的时分增添一个办法不需修正其他办法内容,程序浏览也绝对轻松良多。

详细计划完成:

创立结算处置工具:uo_Balance

balance的办法:of_GetPayment(as_Customer_Type)//内部会见处置

of_GetGeneralPayment()//一般客户结算处置

of_GetVIPPayment()//VIP会员结算处置

of_OtherPayment()//其他处置

of_GetPayment办法完成:

Doubleld_Payment

choosecaseas_Customer_Type

caseG//一般

ld_Payment=of_GetGeneralPayment()

caseV//vip

ld_Payment=of_GetVipPayment()

caseelse

ld_Payment=of_OtherPayment()

endchoose

returnld_Payment

of_GetGeneralPayment办法完成:

Doubleld_Payment

//结算处置

returnld_Payment

of_GetVIPPayment()of_OtherPayment()处置体例与of_GetGeneralPayment()分歧。

处置挪用:

uo_Balanceluo_Process

Stringls_Customer_Type

Doubleld_Payment

luo_Process=createuo_Balance

//作废费者范例

ls_Customer_Type=..............

ld_Payment=luo_Process.of_GetPayment()

//其他处置

到此计划完成。

以上是自己的团体履历总结,有不敷的地方请人人斧正。
恢复到之前的某个状态,是需要数据的。这数据可以是a)回滚步骤或者b)操作之前的数据状态原文。

只想知道 发表于 2015-1-19 14:22:32

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

谁可相欹 发表于 2015-1-25 21:49:19

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

山那边是海 发表于 2015-2-4 06:14:26

对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。

精灵巫婆 发表于 2015-2-9 17:20:37

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

活着的死人 发表于 2015-2-27 12:45:53

如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。

深爱那片海 发表于 2015-3-9 05:10:27

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。

再见西城 发表于 2015-3-16 20:47:27

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

愤怒的大鸟 发表于 2015-3-23 02:18:22

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
页: [1]
查看完整版本: MSSQL教程之多范例营业处置计划技能