存储过程触发器试验.docx
实验:存储过程、触发器试验(4学时)一、 实验目的1、熟悉存储过程的创建和使用。2、熟悉触发器的创建和使用。二、 实验内容1、在SQ1ServerManagementStudio中使用命令窗口输入SQ1命令建立存储过程和触发器。2、使用SQ1命令执行建立的存储过程。3、使用SQ1执行一定的语句触发触发器。三、 实验步骤1、在SQ1ServerManagementStudio中,新建存储过程。2、在查询窗口中设计3种:不使用参数的、使用参数的和使用通配符的存储过程。问题:1、建立查找表borrower中所有用户名字的存储过程。2、建立从branch表中返回指定branch_name的branch信息的存储过程。3、建立带有通配符参数的存储过程。要求从borrower表返回些指定用户名的信息,该存储过程对传递的参数进行模式匹配,如果没有参数,则返回所有用户的信息。3、调用存储过程测试是否能正常运行。4、修改存储过程问题:将参考中的usp_getcustomer修改成按指定IOan.number的查找表1oan条目的存储过程,要求从ban表返回一些指定用户名的信息,该存储过程对传递的参数进行模式匹配,如果没有参数,则返回所有用户的信息。5、删除存储过程USP_getcustomer。6、设计3种:由INSERT、UPDATE和DE1ETE操作触发的触发器。7、执行INSERT.UPDATE和DE1ETE操作测试创建的3种触发器。用SQ1命令窗口创建存储过程打开SQ1ServerManagementStUdio,用鼠标单击”对象资源管理器"中"banking"下的”存储过程“,在窗口的右侧显示当前数据库的所有存储过程,单击鼠标右键,在弹出的快捷菜单上选择"新建存储过程 在新打开的SQ1命令窗口中,给出了创建存储过程命令的模板,按照下面的代码修改建立存储过程的命令模板后执行。createprocedureusp_get1oanasse1ect*from1oan; 建立完成后,在对象资源管理器可查看此存储过程 执行存储过程:Executeusp_get1oan;8、用SQ1命令行创建存储过程。单击“新建查询“按钮打开SQ1命令窗口,输入以下代码后执行,立即建立存储过程,该存储过程接受与传递的参数精确匹配的值,从customer表中查找指定姓名的用户信息。createprocedureusp_getcustomernamevarchar(40)se1ect*fromcustomerwherecustomername=name;i行存储过程:executeusp_getcustomer'Adams3更改存储过程a1terprocedureusp_get1oannamevarchar(40)='%'se1ect*fromaccountwherebranch_name1ikename;4查看存储过程usp_get源代码Executesp_he1ptextusp_get删除usp_getcustomer不0,m81285CSQSeW961为9WHtSJeMB*4U*tW<闲1i»Mt>«33iJMEZtworfcI,:JAtkefthrwWoriaDWRijBr*r<囹Q囹'我G2as囹QRk词,-1BJiW性F.J装也存it1物Qdbo.u.gUMcw.2<t».usp_Qedoy>一Eiemrr也 1*a-JUtI _1度且 IawIffiCB5e2«CrcS囹口号修囹口安Et3)S±-,务教 U««MU管理 二>Mtf4bcnS*vm 1出SQ1SerF4t触发器:I、语法格式:rimxsqinosQveryK.sqr.尔两QCdropprocuepaetcusccoeE.Q1QfIZR:M%M*SqUmW备今已或功完咸,。直中已晚功!Mi1r>»19«2O0619OM1)rjOMwt66)I3xCO00:00。行chaX*E)M£>aCD<8(E)X1KD口皿ttS<DffibM1J>»却出(2)击,CREATETRIGGERschema_name.trigger_nameONtab1eviewWITH<dm1_trigger_option>,.nFORIAFTERINSTEADOFINSERTzUPDATE,DE1ETEWITHAPPENDNOTFORREP1ICATIONASsq1_statement;.njEXTERNA1NAME<methodspecifier;>createTRIGGERupdateaccountONdbo.accountforUPDATEASifupdate(branch_name)BEGINSETNOCOUNTON;updatebranchsetbranch_name=i.branch_namefrombranchbr,De1etedd,Insertediwherebr.branch_name=d.branch_nameENDrJ»1SQUO».<XQuerfi7«TMSQ12005QQUCr“6才VSQUOC6QQuy15ROMIsQ12005UXOJer0支寿W×crtT*XGGKf(up<1taccount)CK(<*>o)(covnc)forUPPATI18Ifup<MtbcanchaB4nsBEGIN5TMoCoW(TOf;UIKSNebreachsetbra&ch_na»e-1.bAnchsMerefco>beMtchbez1t<1dzXixsercad1vtwrbr.branchiwawd.branchnar*EXPrjO91VSai2DO5O11)rj091u<66)IaZ888O行2、使用触发器防止数据库的任一表被修改或删除createtriggersafetyondatabasefordrop_tab1e,a1ter_tab1easprint,你必须使Safty触发器无效以执行对表的操作!,ro11back;3、使用提醒消息的触发器。右键新建触发器CREATETRIGGERreminderONcustomerAFTERINSERT,DE1ETE,UPDATEASBEGINraiserror(youwantinsertrecordsintocustomer,16,10);SETNOCOUNTON;ENDjhmwJj3»$dj&“口Ub才E!执口凶祥,匕AiF1Wd0S/也«»0)-,:u-QnrenSC!120»WSw9,a15997aJ>X!:-J*1S*ffiCjCMt*6囹UAMrtIXVtar3,B(Jb*JJ1rJeCr美不明TJ/U>MW-Z)dso.crt,1I霰曳<t»t<»wer<二<ft>o.t*vh-3心,OUSMner纪d克si1jaum%bSJrw*S"同N1w1.顺0cft>o.(poatof.gtoanEGtAE一*U!tE口同文同EcBJiUI-S14的以段Urt(M*B,程学复StI,二置引1欧4值5«MCeeMerCRXATITOIGOZRreeinderCNCusCOtterXrTtJtUiSEftTM1m1UPDATtBKGIXCaieerror'yo¾<*ntIiwercrecordsncocueccoer*SITMOCOWTCM:tut>4、使用系统存储过程SpJe1p1ext查看触发器正文。sp_he1ptextreminder文MDRc(D询9)HB<2>XJUD口侬Iifi1g电IhMJ“3S9己&6一龄»丫心.2>牝2/-i>twx-Jw*t>wJMF1Wx6IJAArtrUtrOWfiUU*rH1WU或嘘哀S0OWZt6);*-Z<-3U©幻二工卑理qKZX3,OT.5Qi200s.QiQui6©igzcos.但ISR询WMm#32CMATKTItXCOEftret>1BdtrC0CCUStomrAFTtRn<SKRT,OtirT1zOPDATIA3BEGZNraiMroEyoubtiAcrcrecord*intoctt>tCM,zz10):SETNOCCCNTcm:DfD二!则-J®妁中-.HX#(daCeccar"引tta«to.Ocooww*01br6ch<bXMttonar.-1妁GHXS2rwdrJ1K11-jA«1>J场it1在bodo<orO<0JMnSQiftffi&J*tHSCJ即3acw14的攻我s,恭IKmt夏»1出糠,:JciIIfItrU值WQiSeMeBrof军'存婚僦必纨行.OOo1SV2CCBcBOm)rJOOKtouQB)3OOoOaOD5、删除触发器droptriggerreminderHiM11iiaai-1江区¥B IMeaBH * bXACD口6告B岁H-4n 1 HRSi G1.a11¢.JQ"4-,«£ 556-3X!12OO5(&Savw 90JJWnM< 15MS 1 *§»H -1 W5 ffi GC masR Q Ois1Bj*m 10U 93庄。青RHXcis“ 6S9SSM田。弟一 1 0uB. U ?围 U UW97*3上 U &9-ACSI出CaM11«V- 1sE1ga1*- U &WP aVOftQ 一 U -? bsme%s,1 *as 1BI ?aTma 1 0sA «j1 1 Sss * 1as fB W 1aff 1tUMa SIU ? 1s.匕/?2-CM