SQL Server触发器
来源:互联网 发布:mac的ae插件怎么安装 编辑:程序博客网 时间:2024/06/05 05:48
地址:http://blog.csdn.net/zuozuo1245/article/details/9067437#t0
概念:
触发器是一种特殊的存储过程,不同于普通的存储过程。存储过程可以用存储过程名直接被调用,而触发器是通过事件的触发而被执行。
类型:
insert触发器:在表进行插入操作时触发。
update触发器:在表进行更新操作时触发。
Delete触发器:在表进行删除操作时触发。
after触发器:在一个触发动作之后激发,并提供一种一种机制以控制多个触发器的执行顺序。
instead of触发器:不执行插入、更新或者删除操作,用instead of触发器的SQL语句代替那些操作。
例子:
新闻发布系统中有新闻类别表、新闻表和评论表,新闻类别表的主键是新闻表的外键,新闻表的主键时评论表的外键。要删除某一新闻类别时因为建立了外键约束不能直接删除新闻类别,这时可以有三种解决办法。
一是:在建立外键约束时,在INSERT和UPDATE规范下面的删除规则里选择“级联”选项。(详见我的博客:sql server2008如何创建外键)
二是:用存储过程。写一个存储过程,里面包含三个删除操作,首先删除评论表里的内容,接着删除新闻表里的内容,最后才是删除新闻类别表中的内容。
SQL语句是:
- CREATE PROCEDURE [dbo].[PROC_DeleteCategory]
- @caId int
- AS
- BEGIN
- --删除评论
- delete from comment where newsId in( select id from news where caId =@caId )
- --删除新闻
- delete news where caId =@caId
- --删除类别
- delete category where id =@caId
- END
三是:用触发器。这里要用instead of触发器,因为after触发器是要操作之后,这里因为有外键约束不能执行删除类别操作 。所以要用instead of触发器,他不执行sql语句的删除类别操作,他执行instead of触发器。
SQL语句是:
- -- =============================================
- -- Author: 左华蓉
- -- Create date: 2013.6.9
- -- Description: 删除类别触发器
- -- =============================================
- CREATE TRIGGER [dbo].[trigCategoryDelete]
- ON [dbo].[category]
- instead of DELETE
- AS
- BEGIN
- declare @caId int
- select @caId = id from deleted
- --删除评论
- delete comment where newsId in(select newsId from news where caId=@caId)
- --删除新闻
- delete news where caId =@caId
- --删除类别
- delete category where id =@caId
- END
比较:
第一种方法最为简单,但是局限性也很大,只能是一些简单的删除更新操作,如果我要插入一个新闻类别,但是不允许类别名中含有某个关键字,则他就无能为力了。触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须是用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。触发器可以用来强制实施复杂的业务规则,以确保数据的完整性。
- 【sql server】SQL触发器
- SQL-SERVER触发器
- SQL Server触发器
- Ms SQL Server 触发器
- sql server:触发器
- sql server 触发器
- SQL Server创建触发器
- SQL Server触发器
- SQL Server创建触发器
- SQL Server创建触发器
- Sql Server 触发器(二)
- sql-server 简单触发器
- SQL SERVER 触发器-实例
- SQL Server中的触发器
- SQL Server 触发器
- SQL Server触发器
- SQL Server 触发器
- SQL SERVER触发器实现
- MSIL指令大全
- MAX Reactor之软体
- 关于网站用户粘度的简单计算方法
- 内核定时器编程
- WPF格式化绑定数据
- SQL Server触发器
- 人生最不值得你去做的30件事
- 收集 Magento 免费资源
- [WinForm]关于InvokeRequired与Invoke
- 数据修改之返回修改的数据
- C++之关键字volatile
- GROUP FUNCTION对NULL值的处理
- ASP.NET MVC简单编程篇(一)
- HtmlAgilityPack 抓取页面的乱码处理