欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年存储过程、触发器的例子( .pdf

    • 资源ID:42695550       资源大小:107.73KB        全文页数:12页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年存储过程、触发器的例子( .pdf

    存储过程:1.CREATEPROCEDURE loving AS BEGIN SELECT*from student where ssex=女END:执行Exec loving 2.CREATEPROCEDURE loving1 as BEGIN SELECT*from student end 3.CREATEPROCEDURE pr1_sc_ins Param1 char(10),Param2 char(2),Param3 realAS BEGIN insertinto sc(sno,cno,grade)values(Param1,Param2,Param3)END 执行:EXEC pr1_sc_ins 200215121,4,85 或EXEC pr1_sc_ins Param1=200215121,Param2=6,Param3=85 4.CREATEPROCEDURE s_grade sname char(8),sgrade realoutput AS SELECT sgrade=grade from sc join student on student.sno=sc.sno where sname=sname执行:DECLAREsgrade real EXECs_grade sname=李勇 ,sgrade=sgrade OUTPUT 5.CREATEPROCEDURE s_grade1 ssno char(9),sgrade realoutput AS SELECT sgrade=avg(grade)from sc where sno=ssno 执行:DECLAREsgrade real EXEC s_grade1 ssno=200215121,sgrade=sgrade OUTPUT SELECT sgrade6.CREATE PROCEDURE s_grade2 youbiaocursor varyingoutput AS set=cursor forward_only -forward_only表示从第一条开始往下-static(这里可以添加)forSELECT sgrade=avg(grade)from sc groupby sno open youbiao -打开游标go执行:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 12 页 -declare youbiao2 cursor -定义一个游标作参数,用于上面那个存储过程exec guocheng5 youbiao=youbiao2 outputSELECTyoubiao7.if exists(select*from sysobjects where name=guocheng and type=p)-判定存储过程是否存在drop proc guocheng go create proc guocheng id int,name nvarchar(50)as set nocount on set rowcount id -设置要查询多少条数据-select*from adminurl where urlname like name -(1)这里的通配符是在传参数的时候带上的select*from student where urlname like%+name+%-(2)这里的通配符是程序自带的,推荐这个go 8.加密存储过程和实现另外一种模糊查询(用到系统函数)-if exists(select name from sysobjects where name=guocheng2 and type=p)drop proc guocheng2 -判断是否存在go create proc guocheng2 name nvarchar(100)with encryption -实现对存储过程加密,以后谁也看不到内容,所以事先要有备份as set nocount on select*from student where charindex(name,urlname)0 -chaindex的作用相当于 Like name go drop proc guocheng2 exec guocheng2 功能 -存储过程的几种返回值(output,return,select)-(1)output存储过程 注意在.NET 中是怎样接受的 if exists(select name from sysobjects where name=guocheng3 and type=p)drop proc guocheng3 -判断是否存在go create proc guocheng3 n int output,-申明是输出参数name nvarchar(50)with encryption -加密as 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 12 页 -set nocount on -不显示记录数,提高网络select*from student where urlname like%+name+%set n=rowcount -赋值go-开始测试declare n int -定义输出参数exec guocheng3 n output,管理 print n -验证是否输出参数已经赋值-(2)return存储过程,切记 return返回的必须是整型值 注意在.NET 中是怎样接受的 if exists(select name from sysobjects where name=guocheng4 and type=p)drop proc guocheng4 go create proc guocheng4 name nvarchar(50),n int with encryption as set nocount on set rowcount n select*from student where urlname like%+name+%if(rowcount0)return 1 else return 0 go-开始测试declare m int exec m=guocheng4 管理,4 print m-(3):带返回游标的存储过程,并且游标只能是output类型-【1.定义】if exists(select*from sysobjects where name=guocheng5 and type=p)drop proc guocheng5 -判断存在否go create proc guocheng5 youbiao cursor varying output -定义一个游标输出参数,varying表示可以变化的as set youbiao=cursor forward_only -forward_only表示从第一条开始往下-static(这里可以添加)for select comment from adminurl -static表示建立一个临时副本,不允许修改基表,如果没有就可以修改基表open youbiao -打开游标go-【2.使用】if exists(select name from sysobjects where name=guocheng6 and type=p)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 12 页 -drop proc guocheng6 go create proc guocheng6 -用来调用 guocheng5 as declare n nvarchar(100)-定义一个变量用于接收游标的移动的每条记录declare youbiao2 cursor -定义一个游标作参数,用于上面那个存储过程exec guocheng5 youbiao=youbiao2 output -赋值给定义个游标fetch next from youbiao2 into n -每条记录赋值while(fetch_status=0)begin if(n=2m)update adminurl set comment=comment+M where current of youbiao2 -能进行修改的前提是上面定义的游标没有static else update adminurl set comment=comment+O where current of youbiao2 -能进行修改的前提是上面定义的游标没有static fetch next from youbiao2 into n -循环赋值end close youbiao2 deallocate youbiao2 go exec guocheng6 -开始执行存储过程6-创建一个带默认值的带判断的存储过程if exists(select name from sysobjects where name=guocheng7 and xtype=p)drop proc guocheng7 go create proc guocheng7 name nvarchar(100)=null,-定义一个默认值是空的输入参数n int output -定义一个输出参数as if name is null -判断参数是否为空begin print error!return end select n=count(*)from student where urlname like%+name+%-给输出参数赋值print n go declare m int -定义临时变量exec guocheng7 管理,m -执行exec guocheng7 n=m -执行带默认值的,但是不能写成exec guocheng7 m-执行远程存储过程-创建连接服务器名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 12 页 -exec sp_addlinkedserver srv_lnk,sqloledb,210.38.202.16 exec sp_addlinkedsrvlogin srv_lnk,false,null,sa,sgu3197-这个允许调用链接服务器上的存储过程exec sp_serveroption srv_lnk,rpc out,true go-执行远程存储过程,其中srv_lnk是远程数据库的别名exec srv_shop.dbo.guocheng1-设置或撤销自动执行存储过程-use master -必须设置这个数据库exec sp_procoption 存储过程名字,startup,on -设置自动执行的存储过程exec sp_procoption 存储过程名字,startup,off -取消自动执行的存储过程go-名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 12 页 -触发器:DML触发器,属于某个表1.CREATE TRIGGER tr1 ON sc FOR INSERT,UPDATE,DELETE AS PRINT inserted表:Select*from inserted PRINT deleted表:Select*from deleted执行 insertinto sc values(200215127,1,89)update sc set grade=78 where sno=200215127 2.CREATE TRIGGER tr_s1 ON student FOR INSERT,UPDA TE AS Begin DECLARE bh varchar(6)SELECT bh=inserted.sno FROM inserted Select bh/*获取插入或更新操作时的新值(学号)*/End 执行:insertinto student(sno)values(200215141)3.CREATETRIGGER sc_insupd ON sc FOR INSERT,UPDATE AS DECLARE cj int SELECT cj=inserted.grade from inserted IF(cj 100)BEGIN RAISERROR(成绩的取值必须在到之间,16,1)ROLLBACKTRANSACTION END 执行:insertinto sc values(200215127,2,109)在消息框中显示:你删除一条数据,操作成功inserted表:(1 行受影响)deleted表:(0 行受影响)消息50000,级别16,状态 1,过程 sc_insupd,第9 行成绩的取值必须在到之间消息3609,级别 16,状态1,第1 行事务在触发器中结束。批处理已中止。4.CREATE TRIGGER tr_del_s ON student FOR DELETE as 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 12 页 -BEGIN DECLARE bh char(5)Select bh=deleted.sno from deleted Delete sc where sno=bh END 执行:deletefrom student where sno=200215127在消息框中显示5use sss ifobject_id(loving20,TR)isnotnull DROP TRIGGER LOVING20 GO CREATETRIGGER LOVING20 ON COURSE AFTER DELETE ASBEGIN-SET NOCOUNT ON added to prevent extra result sets from-interfering with SELECT statements.SET NOCOUNT ON;-Insert statements for trigger here PRINT 你删除一条数据,操作成功 END GO 执行deletefrom course where cno=8在消息框中显示:你删除一条数据,操作成功(1 行受影响)6use sss ifobject_id(loving,TR)isnotnull DROP TRIGGER LOVING GO CREATETRIGGER LOVING ON COURSE AFTER INSERT,UPDATE ASRAISERROR(NOTIFY COURSR RELATIONS,16,10)GO 执行:insertinto course values(9,数据库系统原理,5,3)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 12 页 -在消息框中显示:消息50000,级别16,状态 10,过程 LOVING2,第4 行NOTIFY COURSR RELATIONS(1 行受影响)执行:update course set Ccredit=3 where cno=1 在消息框中显示:消息50000,级别16,状态 10,过程 LOVING2,第4 行NOTIFY COURSR RELATIONS(1 行受影响)7.use sss ifobject_id(loving10,TR)isnotnull DROP TRIGGER LOVING10 GO CREATETRIGGER LOVING10 ON COURSE AFTER INSERT ASPRINT 你插入一条数据,操作成功 GO 执行:insertinto course values(9,数据库系统原理,5,3)在消息框中显示:消息50000,级别16,状态 10,过程 LOVING2,第4 行NOTIFY COURSR RELATIONS 你插入一条数据,操作成功8。CREATE TRIGGER s_reminder ON Student WITH ENCRYPTION AFTER INSERT,UPDATEAS RAISERROR(不能对该表执行添加、更新操作,16,10)ROLLBACK GO 执行:insertinto student(sno)values(200215142)在消息框中显示:(1 行受影响)消息50000,级别16,状态 10,过程 s_reminder,第 6 行不能对该表执行添加、更新操作消息3609,级别 16,状态1,第1 行事务在触发器中结束。批处理已中止。ALTERTRIGGER s_reminder ON Student AFTER INSERT AS RAISERROR(不能对该表执行添加操作,16,10)ROLLBACK 在消息框中显示:(1 行受影响)消息50000,级别16,状态 10,过程 s_reminder,第 5 行不能对该表执行添加操作消息3609,级别 16,状态1,第1 行事务在触发器中结束。批处理已中止。(1 行受影响)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 12 页 -9.CREATETABLE sss(sno char(9)references student(sno),sage smallint NULL,updatatime datetime NULL)Createtrigger compensation on Student after update as ifrowcount=0 return ifupdate(sage)begininsert sss select sno,sage,getdate()from inserted end 执行:update student set sage=19 where sno=200215121 假设表结构是表(id主键,Count,c1,c2,c3,c4)数据类型都是int10.create trigger Mytrg on 表名instead of insert as declare Myii begin select Myii=Count from inserted if(Myii0)insert into 表名 select*from inserted else begin-这里执行你说的 满足条件是触发 的事情-范例中是 Count0 的值就执行插入新数据,否则不执行插入的范例用UPDATE是一样的代码如下:11.create trigger Mytrg on 表名instead of update as declare Myii int,id int,c1 int,c2 int,c3 int,c4 int begin select Myii=Count,id=id,c1=c1,c2=c2,c3=c3,c4=c4 from inserted if(Myii0)update 表名 set Count=Myii,c1=c1,c2=c2,c3=c3,c4=c4 where id=id-如果你再要更新其他字段,必须在这一个触发器实现,所以这个范例是你更新任意字段(除ID)else begin 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 12 页 -这里执行你说的 满足条件是触发 的事情-范例中是 Count1 and(select count(*)from deleted)1)print 多条更新 else if(select count(*)from inserted)=0 and(select count(*)from deleted)0)print 多条删除 else if(select count(*)from inserted)1 and(select count(*)from deleted)=0)begin print 添加多条 declare m int set m=0 declare n int declare youbiao cursor for select id from inserted open youbiao fetch next from youbiao into n while(fetch_status=0)begin set m=m+2 fetch next from youbiao into n end close youbiao deallocate youbiao print m end end end-*-*drop trigger chufa -删除触发器select*from adminurl-实例实验insert into adminurl select*,from#n -注意语句中的,当查询表里面没有添加表的字段的时候可以用常量代替,它不会影响查询操作insert into adminurl select url,urlname,comment from adminurl where id in(15,8,6,4,1)-多条插入,检验触发器对多条插入的相应insert into adminurl select url,urlname,comment from adminurl where id=8 -单条插入名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 12 页 -

    注意事项

    本文(2022年存储过程、触发器的例子( .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开