了解SQL Server触发器及触发器中的事务

了解SQL Server触发器及触发器中的事务

ID:38704491

大小:722.50 KB

页数:13页

时间:2019-06-17

了解SQL Server触发器及触发器中的事务_第1页
了解SQL Server触发器及触发器中的事务_第2页
了解SQL Server触发器及触发器中的事务_第3页
了解SQL Server触发器及触发器中的事务_第4页
了解SQL Server触发器及触发器中的事务_第5页
资源描述:

《了解SQL Server触发器及触发器中的事务》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、了解SQLServer触发器及触发器中的事务    首先,说下我写篇文章的目的,我希望能把我对触发器的理解,分享出来与你一起学习。如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事,和触发器中事务个故事。在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器&DDL触发器)和After触发器& InsteadOf触发器的应用不同,开始说起它们,然后是说与事务有关的故事。 在下面的内容,用到一些SQLServer触发器和事务

2、的一些术语,如果有些不明白的地方,可以查阅MSDN资料库,或SQLServer本地帮助文档:DML触发器(DMLTriggers)DDL触发器(DDLTriggers)事务模式(Transactionmodes)显式事务(ExplicitTransactions)自动提交事务(AutocommitTransactions)隐式事务(ImplicitTransactions)批范围的事务(Batch-scopedTransactions)After触发器VsInsteadOf触发器          After触发器将在

3、处理触发操作(Insert、Update或Delete)、InsteadOf触发器和约束之后激发。InsteadOf是将在处理约束前激发,以替代触发操作。下面两张图描述了After触发器和InsteadOf触发器的执行先后顺序。               图1                                                                            图2    左边的图1,描述了After触发器执行顺序情况,我在这里通过一个简单的例子来说明After触发器的

4、执行顺序,以便能加深对左图1After触发器的理解。先创建表ContactusetempdbGoifobject_id('Contact')IsNotnullDropTableContactGoCreateTableContact(IDintPrimaryKeyIdentity(1,1),Namenvarchar(50),Sexnchar(2)Check(SexIn(N'F',N'M'))Default('M'))Go再创建After触发器tr_ContactusetempdbGoIfExists(Select1Fro

5、msys.triggersWherename='tr_Contact')DropTriggertr_ContactGoCreateTriggertr_ContactOnContactAfterInsertAsSelectName,SexFromInserted/*显示Inserted表的内容,用来判断触发器执行的先后顺序*/Go然后Insert数据,判断After触发器的执行顺序usetempdbGoInsertIntoContact(Name,Sex)Values('Bill','U')Go这里,在没有运行Inser

6、t语句之前,我们可以判断,执行Insert过程会触发Check错误,因为字段Sex的值必须是”F”Or“M”,而这里将要插入的是”U”.好了,再来看运行Insert语句后的情况。本例子,只看到引发Check约束冲突的错误,而无法看到Inserted表的数据,说明一点就是,引起Check约束之前,不会引发After触发器tr_Contact的操作。这就验证了图1的After触发器执行顺序情况。    好了,接下来,我们再测试InsteadOf触发器图2的情况;我使用上边建好的测试表Contact来举例。先修改触发器tr_

7、Contact内容,usetempdbGoIfExists(Select1Fromsys.triggersWherename='tr_Contact')DropTriggertr_ContactGoCreateTriggertr_ContactOnContactInsteadOfInsertAsprint'触发器作代替执行操作'InsertIntoContact(Name,Sex)SelectName,SexFromInserted/*代替触发器外面的Insert行为*/Go再Insert数据,观察SQLServer执

8、行后的提示信息,usetempdbGoInsertIntoContact(Name,Sex)Values('Bill','U')Go  这里,看到,先是触发器操作,再是Check约束处理。本例中,在触发器里面使用一条Insert的语句来描述触发器的代替执行操作,这SQL语句通过Select表Inserted得到触发器外面Inser

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。