SQL Server基础概念--触发器 <>

系统 1873 0

触发器是一种实施复杂的完整性约束的特殊存储过程。它在 SQL Server 进行某个特定的表修改时由 SQL Server 自动执行。触发器一般用于加强数据库的某些使用规则。当普通的约束(包括 CHECK 机制、 DEFAULT 机制、 RULE 机制)不足于加强数据的完整性时,就可以考虑使用触发器。触发器对于那些为不同的商务软件提供后台数据服务的大型系统特别有用。因为触发器可以为数据库建立独立于具体客户端软件的完整性规则。

 

触发器和表是紧密联系在一起的,任何触发器都是在特定的表上进行定义的,该表也称为触发器的触发表。由于在触发器中可以包含复杂的处理逻辑,因而在 下列情况 下应该 考虑使用触发器

(1)       强制比 CHECK 约束复杂的数据完整性。如需要引用其他表数据的检查是无法通过 CHECK 约束完成的,必须使用触发器加以实现。

(2)       使用自定义的错误信息。通过触发器,用户可以捕获破坏数据完整性的各种操作,并自由地调用预先定义的错误信息或动态地定制错误信息。约束、规则和默认值只能通过标准的系统错误信息传递错误信息。如果应用程序要求定制的错误信息和执行更加复杂的错误处理,那么必须使用触发器。

(3)       实现数据库中多张表的级联修改。

(4)       比较数据库修改前后数据的状态。大多数触发器都提供了跟踪 INSERT UPDATE DELETE 语句引起的数据变化的能力。因此用户可以方便地在触发器中找出或访问由于修改而发生数据变化的记录行。

(5)       维护非规范数据。用户可以使用触发器来保证非规范数据库环境中低级数据的完整性。

 

创建触发器的 语法格式 如下:

CREATE TRIGGER trigger_name

ON { table | view }

[ WITH ENCRYPTION ]

{ FOR | AFTER |INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE] }

AS

      [{ IF UPDATE (column_name) }]

      [{ AND | OR } UPDATE (column_name) ]

      Sql_statement [ n]

其中,部分 参数含义 如下:

(1)      trigger_name :所建立的触发器的名称。触发器的命名必须遵循 SQL Server 标示符的命名约定,并且在数据库中必须唯一。

(2)      table|view: 在其上建立触发器的基表或视图,有时也称为触发器表或触发器视图。

(3)      INSERT,UPDATE DELETE :该关键字指定当在表或视图上执行哪些数据修改操作时将激活触发器。 SQL Server 允许同一个触发器被一种或多种操作触发。

(4)      IF UPDATE column_name ):指定当对基表内的某字段或某几个字段进行插入( INSERT )或修改( UPDATE )时,触发才起作用。

(5)      Sql_statement :触发器在被触发之后所执行的数据库操作。在 SQL Server 中,一个触发器能够包含任意数量的 SQL 语句。

 

触发器虽然在强制数据完整性方面有着十分重要的地位,但是,作为一种 特殊存储过程 ,它还有以下 几点约束

(1)      如果在一段批处理命令中使用 CREATE TRIGGER 命令时, CREATE TRIGGER 命令必须是批处理命令的第一条。

(2)      在表中如果既有约束又有触发器,则在执行时,约束优先于触发器。而且如果在操作中触发器与约束发生冲突,触发器将不执行。

(3)      不允许在触发器程序中出现下列语句,否则 SQL Server 将拒绝执行:

                     i.        任何数据库对象的创建指令。例如: CREATE DATABASE,CREATE TABLE CREATE INDEX

                    ii.        任何数据库对象的删除指令。如 DROP DATABASE,CREATE TABLE,DROP PROCEDURE

                   iii.        所有的对象修改语句,如 ALTER TABLE ALTER DATABASE.

                    iv.        TRIMCATE TABLE 命令

                     v.        SELECT INTO 命令

                    vi.        权限命令( GRANT REVOKE

                   vii.        UPDATE STATISTICS 语句

                  viii.        SELECT INTO (因为该语句创建了一个表)

                    ix.        RECONFIGURE 语句

                     x.        LOAD,RESTORE DATABASE LOG

                    xi.        所有的磁盘操作命令

 

(4)      触发器不允许创建在特定的表格上,虽然在创建时不会提示任何的错误,但所创建的触发器不会有任何作用。

(5)      TRUNCATE 命令不能触发可以被 DELETE 操作触发的触发器。

 

Inserted 表和 deleted 表是触发器专用的 临时虚拟表 。在 UPDATE 类型的触发器中,两者均有, INSERT 中包含 inserted 表, DELETE 中包含 deleted 表。且他们只能由创建他们的触发器引用。触发器工作完成后,与该触发器相关的两个表也会被删除。

 

INSERT 触发器和 UPDATE 触发器常用语确保用户某些复杂的、特殊的商业规则,并保证数据在插入数据表之前是有效的。 DELETE 触发器主要有两个用途 :首先是防止用户的错误的删除操作;其次是在用户删除某个记录时,自动实施级联删除,确保数据完整性。

 

如果在某触发器的执行过程中修改了另一个表,并触发了该表的触发器,这种情况称为 触发器嵌套 。使用嵌套触发器时,应考虑下列因素:

(1)      在默认情况下,触发器不允许递归调用。也就是说,触发器不能自己触发自己。

(2)      因为一个触发器是一个事务,所以在嵌套触发器中,如果任意一点失败,那么整个事务和数据的修改将全部回滚(数据完整性的一种保护机制),如果调试的话,请在其中添加适当的打印信息。

 

查看触发器信息 可以使用以下的系统存储过程:

(1)      sp_depends<tablename> :用于查看触发器的名称。

(2)      sp_helptigger<tablename> :用于查看触发器的类型和拥有者等初步的信息。

(3)      sp_helptext<triggername> :用于查看触发器的定义文本。

 

SQL 企业管理器中,不能直接删除触发器,因此, 删除触发器 只能使用 T-SQL 中的 DROP TRIGGER 语句

 

ref: http://blog.csdn.net/guilin_gavin/archive/2009/01/09/3742065.aspx  

ref: http://database.51cto.com/art/200904/118363.htm  

SQL Server基础概念--触发器 <>


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论