SQL Server和T-SQL数据操纵(二)

日期: 2008-11-16 作者:SearchSQLServer.com翻译:April 来源:TechTarget中国 英文

AFTER触发器只能存在于表中,它可以用来处理DML语句,完成操作以后,触发器代码就开始运行。例如,如果程序要在表中插入一个新员工,就要用到插入触发器。触发器中的代码发出插入请求部分任务完成以后就开始运行了。管理事务部属于本章范围,但是你应该知道,因为触发器和DML语句在相同的环境中运行,你可以对受影响的数据进行更改,直到重新执行这个语句。

如果不符合事务规则要求,AFTER触发器对于改变事务规则和取消修正就很有用。   在执行AFTER触发器的过程中,你要访问两个虚函数表(virtual table),一个为Inserted,另一个叫Deleted。Deleted.表中包含修正行的副本,和它们……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

AFTER触发器只能存在于表中,它可以用来处理DML语句,完成操作以后,触发器代码就开始运行。例如,如果程序要在表中插入一个新员工,就要用到插入触发器。触发器中的代码发出插入请求部分任务完成以后就开始运行了。管理事务部属于本章范围,但是你应该知道,因为触发器和DML语句在相同的环境中运行,你可以对受影响的数据进行更改,直到重新执行这个语句。如果不符合事务规则要求,AFTER触发器对于改变事务规则和取消修正就很有用。

  在执行AFTER触发器的过程中,你要访问两个虚函数表(virtual table),一个为Inserted,另一个叫Deleted。Deleted.表中包含修正行的副本,和它们在删除或更新语句之前一样。Inserted表在插入或更新之后有着和基表相同的数据。当你仍然要参考DML语句前后的数据时,这样的安排就允许你在基表中修改数据。

  这些特殊的临时表只有在触发器代码执行时才能够使用,也只能够通过触发器来处理。在创建AFTER触发器时,你可以用一个触发器进行插入、更新和删除。换句话说就是我们能够设置一个触发器同时进行插入和更新,并且还能配置一个不同的触发器进行删除。另外,你可以让多个触发器运行同一个语句。例如,两个触发器就可以进行更新。如果你让多个触发器运行同一个语句,那对这些触发器的顺序有限定。用系统存储程序sp_settriggerorder,你就可以指定先启动哪一个触发器,最后启动哪一个触发器。否则,它们就在中途启动。实际上,这不是一个很大的问题。我们还见过用两个以上的触发器运行同一个指定的语句这样的表。

  INSTEAD OF触发器属于不同的类型。这些触发器是在你所希望方式中运行的。INSTEAD OF触发器中的代码在DML语句中启用,而正是这些语句才能启用触发器。和AFTER触发器不一样,INSTEAD OF触发器能够定义视图和表。你可以用它们来克服视图有多个基表的界限。和之前提到的一样,如果你限定了更新结果只影响单个的基表,你就可以更新你的视图。你还可以用INSTEAD OF触发器更新一个视图的所有列并使用触发器对基表进行适当更新。你还可以用INSTEAD OF触发器通过完全改变DML语句执行操作实现高级数据的完整性或事务规则。

  当然,你还能够控制触发器嵌套和递归式行为。随着嵌套式触发器的开启,一个触发器就执行一个DML语句并引起另一个触发器的开启。例如,在TableA中插入一行就会引起TableA插入一个触发器开启。这就是触发器嵌套(一个触发器引起另一个触发器的开启),这就是默认行为(default behavior)。伴随着嵌套触发器的开启,SQL Server允许嵌入32个触发器。无论有没有设置嵌套的选项,INSTEAD OF触发器能够进行嵌套。

  CLR整合

  从SQL Server 2005发布时起,我们就了解如何和.NET Framework Common Language Runtime(CLR)进行结合。简单地说,CLR整合能让你在SQL Server对象里用.NET程序设计语言。你可以创建存储过程、自定义函数、触发器。CLR自定义类型能在Microsoft .NET里多种高级语言。这一层面的程序设计不属于本专题的内容,但是你需要注意SQL Server有使用CLR的性能。很有可能你会碰到一位想用CLR的开发人员,或者你发现自己需要实施一个用标准的SQL Server对象和T-SQL语言不容易实现的、复杂的事务规则。所以如果你懂代码或有一位懂代码的朋友,你就可以用CLR创建一个函数增强复杂规则。

翻译

April
April

相关推荐