还剩2页未读,继续阅读
文本内容:
提示不要把答案先发给学生,实验结束后再公布答案要让学生先自己思考做题,老师对学生不会的题目适当提示,一题题解决困惑实验触发器练习-参考代码12/*继续使用实验创建的银行储蓄数据库,客户信息customerinfo表、账户信息accountinfo表、交易信息transInfo表三个表的表结构见表/8~表・20*/1题创建触发器/*说明取款、存款都是需要在交易明细表中插入一条交易记录,触发器就建在交易明细表上,触发的事件是insert操作*/■■查看表中列名和数据的语句select*from transInfo-创建触发器的代码CREATE TRIGGERtr_upycON transInfo一建在transInfo表AFTER INSERT--响应insert事件,后触发AS-必须有的关键字BEGINSET NOCOUNTON:--屏蔽几行受影响的信息select*from accountinfodeclare@jylx char4,@zh varcharl9,@jyje decimal
20.2select@zh=accountID,@jylx=transTypc.@jyjc=transMoney frominserted-从临时表读取新插入的记录信息if@jylx=,支取-判断是存款还是取款update accountinfoset accountMoney=accountMoney-@jyjeWHERE accountlD=@zh一将取款卡余额减少elseupdate accountinfoset accountMoney=accountMoney+@jyjeWHERE accountID=@zh一将存款卡余额增加END对款货源售程器▼X台卜粤粤I,国09LAPTOP-NMGPMIMM\sql2008SQLf-arsssN£口SBIjbank⑷N数搠穿关系图臼口表3NS3dbo.accountlnfo£23dbo.customerlnfo创建成功后在对象资源管理器刷新:dbo.translnfo氏q列©以睡⑷—约束;E
(2)题修改存款、取款存储过程代码,去掉更新账户信息表中该账号余额的语句
①存款存储过程create procp_ck_noUpdate@zh-定义存储过程char19,@je decimal
20.2,-两个输入参数@mess varchar50output—■不小中东粕as-存储过程法中必须有的关键字beginset nocountonif@je1-判断存款大于元begin-修改实验10创建的存款存储过程,只去掉update语句if existsselectaccountlD from accountinfowhere accountlD=@zh andaccountstate=正常beginINSERT INTOtranslnfoaccountlD,transType,transMoneyVALUES@zh;#A;@je-交易信息表transInfo插入存款记录select@mess=存款成功!账号:+@zh+存入+ltrimstr@je+元end elseselect@mess:账号不存在,或己经挂失!endelseselect@mess=存款金额不可以小于元End
②取款存储过程--修改实验11创建的取款存储过程,只去掉update语句create procedurep_qk_noUpdate一定义存储过程@zh char19,@mm char6,@je decimal
20.2,一输入账号、密码、金额@mcss varcharlOOoutput一输出操作结果ASbeginif notexistsfselect accountlDfrom accountinfowhereaccountlD=@zh andaccountState=正常beginselect@mess=账号不存在,或已经挂失!’returnendif notexistsselect*from accountlnfbwhereaccountlD=@zh andpassword=@mmbeginselect@mess=账号密码错误!,returnenddeclare@ye decimal
20.2select@ye=accountMoney from accountinfo where accountID=@zhif@ye@je+1beginselect@mess廿余额不足,请重新输入取款金额!’returnendINSERT INTOtransInfoaccountID,transType.transMoneyVALUES@zh J支取二@je--交易信息表插入存款记录select@mess=取款成功!账号:+@zh+;取款+ltrimstr@je+‘元End题验证存储过程3
①验证存款存储过程-给账号1005存款50兀-先查看账号1005的信息select*fromaccountinfowhere accountID=1005accountID savingTypemoneyType openDateopenMoney accountMoneypassword accountstate11005活期人民币2023-06-1719532126340004000666666正常select*from transInfo where accountID=1005transIDtransDate accountIDtransTypetransMoneybz52023-05-060000000001005存入4000NULL-事先禁用触发器,使之不起作用,然后执行存储过程declare@ms varcharf100exec p_ck_noUpdate1005,5,@ms outputprint@ms力消息执行效果存款成功!账号存入元10550-存款后查看1005账号的数据,余额没有加上新存入的50元accountIDsawigTypemoneyTypeopenDate openMoneya^untMoneypasswordaccountstate110051活期人民币2023-06-171953212634000「40xf]666666正常没增加50anslD_transDate accountID transType transMoney bz1520230^060000000001005存入4000NULL2「122023al72047302801005存入5000NULL!--启用触发器,再次执行存储过程给1005账户存款5023dbo.translnfo二dbo.translnfo田C3列田口列田口键团约束囹二I豌林田启用®匚3约束E口帔发器0口般发器declare@ms varchar100cxcc p_ck_noUpdatc,1005,50,@ms outputprint@ms力消息执行效果存款成功!账号105-存款后再查看105存入50元账号的数据,余额增加了5select*from accountinfowhere accountID=1005select*from transInfowhereaccountID=1005□结果力消息account!D savingTypemoneyTypeopenDateopenMoneyaccountMoney活期人民币2023-06-1719:53:21263400019000111005transIDtrs5msDate accountIDtransTypetransMoneybzJ223-05-0600:00:000001005存入4000NULL123-06-1720:47:30280_1005_存入_5000_NULL2122[3132023-01721:47:562801005存入5000NULL」
②验证取款存储过程账户取款元,密码是默认的100511666666declare@ms varcharlOOexecp_qk_noUpdate1005,666666,11,@ms outputprint@ms■消息1行受影响执行结果取款成功!账号1005,取款11元-查看1005账号的数据变化select*fromaccountinfowhereaccountID=1005select*from iransinfowhereaccountID=1005□口消息accountID savingTypemoneyTypeopenDateopenMoneyaccountMoneypasswordaccountstate1H005活期人民币2023-06-171953212634000
[7900]666666正常transID UansDateaccountIDtransTypetransMoneybz152023-05-060000000001005存入4000NULL2122023-06-172047:302801005存入5000NULL3132023-06-172147562801005存入5000心L、eg41142023-06-172158110931005支取1100NULL。