- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.1.1 存储过程概述 存储过程与函数的区别 存储过程是预编译的,执行效率比函数高。 存储过程可以不返回任何值,也可以返回多个输出变量,但函数有且必须有一个返回值。 存储过程必须单独执行,而函数可以嵌入到表达式中,使用更灵活。 存储过程主要是对逻辑处理的应用或解决,函数主要是一种功能应用。 * 6.2.1触发器概述 2.触发器的优点及局限性 1)触发器的优点 (1)强化了约束的功能 (2)可以跟踪数据变化 (3)支持级联运行 (4)可以调用存储过程 2)触发器的局限性 (1)触发器性能通常比较低 (2)不恰当的使用触发器容易造成数据库维护困难。 6.2.2 创建触发器 1.使用对象资源管理器创建触发器 2.使用CREATE TRIGGER语句创建触发器 CREATE TRIGGER trigger_name ON {table_name|view_name} [WITH ENCRYPTION] {FOR|AFTER|INSTEAD OF} {[INSERT][,] [UPDATE][,] [DELETE]} AS{sql_statement[;][,…n]} 图6-2创建触发器 6.2.2 创建触发器 解释 trigger_name :触发器的名称。 table_name | view_name:对其执行 DML 触发器的表或视图 FOR | AFTER:FOR 或AFTER 指定 DML 触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发。 INSTEAD OF:指定执行 DML 触发器操作而不是执行原 SQL 语句 { [DELETE] [,] [INSERT] [,] [UPDATE] }:指定触发条件数据修改语句 sql_statement:触发条件和操作的SQL语句集合。 6.2.2 创建触发器 【例6-10】在Lend表上创建触发器,维护Book表的AvailableNumber列的一致性。 CREATE TRIGGER Tri_Lend_IUD ON Lend AFTER INSERT,DELETE,UPDATE AS BEGIN UPDATE Book SET availableNumber = number- (SELECT COUNT(*) FROM Lend WHERE Book.CallNo = Lend.CallNo AND returntime IS NULL) WHERE (Book.CallNo IN(SELECT CallNo FROM deleted) OR Book.CallNo IN (SELECT CallNo FROM inserted)) END 6.2.2 创建触发器 【例6-11】在Lend表上创建DELETE触发器,实现如下功能,如果有图书正在借出,则不允许删除。 CREATE TRIGGER tri_Lend_D ON Lend AFTER DELETE AS BEGIN SET NOCOUNT ON; IF EXISTS (SELECT * FROM deleted WHERE ReturnTime IS Null) BEGIN PRINT 有图书有被借出,不能删除! ROLLBACK TRANSACTION --回滚事务,撤销该删除操作 END END 6.2.2 创建触发器 【例6-12】在Book表上创建UPDATE触发器,判断如果修改了书名字段内容,把书名原来的内容及变更时间记录在更新日志表的内容及更新时间字段中。 首先创建更新日志表: CREATE TABLE UpDateLog ( ID INT IDENTITY(1,1) NOT NULL, --从1开始增量为1的自动增长整数 Content NCHAR (100) NULL, Upddate DATETIME NULL) 然后在Book表上创建触发器: CREATE TRIGGER tri_Book_U_Fld_CallNO ON Book AFTER UPDATE AS IF UPDATE(Title) INSERT INTO UpdateLog (Content,Upddate) SELECT Title, Getdate() FROM deleted GetDate()是一个返回当前日期时间的函数,UPDTE()函数用来判断触发器中某个列内容是否被更改,参数为列名,如果该列内容有更改则该函数返回值为真,在触
文档评论(0)