ALTERTRIGGER

  更改原来由 CREATE TRIGGER 语句创建的触发器定义 有关 ALTER TRIGGER 语句所用参数的更多信息 请参见 CREATE TRIGGER

  

  语法

  ALTER TRIGGER trigger_name

  ON ( table | view )

  [ WITH ENCRYPTION ]

  {

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

   [ NOT FOR REPLICATION ]

   AS

   sql_statement [ n ]

   }

   |

   { ( FOR | AFTER | INSTEAD OF ) { [ INSERT ] [ ] [ UPDATE ] }

   [ NOT FOR REPLICATION ]

   AS

   { IF UPDATE ( column )

   [ { AND | OR } UPDATE ( column ) ]

   [ n ]

   | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )

   { comparison_operator } column_bitmask [ n ]

   }

   sql_statement [ n ]

   }

  }

  

  参数

  trigger_name

  

  是要更改的现有触发器

  

  table | view

  

  是触发器在其上执行的表或视图

  

  WITH ENCRYPTION

  

  加密 syscomments 表中包含 ALTER TRIGGER 语句文本的条目 使用 WITH ENCRYPTION 可防止将触发器作为 SQL Server 复制的一部分发布

  

  

  

  说明 如果原来的触发器定义是用 WITH ENCRYPTION 或 RECOMPILE 创建的 那么只有在 ALTER TRIGGER 中也包含这些选项时 这些选项才有效

  

  

  AFTER

  

  指定触发器只有在触发它的 SQL 语句执行成功后才触发 所有的引用级联操作和约束检查也必须成功完成后 才能执行此触发器

  

  如果仅指定了 FOR 关键字 那么 AFTER 是默认设置

  

  AFTER 触发器只能定义在表上

  

  INSTEAD OF

  

  指定执行触发器而不是触发 SQL 语句 从而替代触发语句的操作

  

  在表或视图上 每个 INSERT UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器 然而 可以在每个具有 INSTEAD OF 触发器的视图上定义视图

  

  INSTEAD OF 触发器不允许定义在用 WITH CHECK OPTION 创建的视图上 如果向指定了 WITH CHECK OPTION 选项的视图添加 INSTEAD OF 触发器 SQL Server 将引发一个错误 用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器

  

  { [DELETE] [ ] [INSERT] [ ] [UPDATE] } | { [INSERT] [ ] [UPDATE]}

  

  是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字 必须至少指定一个选项 在触发器定义中允许使用以任意顺序组合的这些关键字 如果指定的选项多于一个 需用逗号分隔这些选项

  

  对于 INSTEAD OF 触发器 不允许在具有 ON DELETE 级联操作引用关系的表上使用 DELETE 选项 同样 也不允许在具有 ON UPDATE 级联操作引用关系的表上使用 UPDATE 选项 有关更多信息 请参见 ALTER TABLE

  

  NOT FOR REPLICATION

  

  表示当复制登录(如 sqlrepl)更改触发器所涉及的表时 不应执行该触发器

  

  AS

  

  是触发器要执行的操作

  

  sql_statement

  

  是触发器的条件和操作

  

  n

  

  是表示触发器中可以包含多条 Transact SQL 语句的占位符

  

  IF UPDATE (column)

  

  测试在指定的列上进行的 INSERT 或 UPDATE 操作 不能用于 DELETE 操作

  

  可以在触发器主体中的任意位置使用 UPDATE(column)

  

  {AND | OR}

  

  指定要测试 INSERT 或 UPDATE 操作的另一个列

  

  column

  

  是要测试 INSERT 或 UPDATE 操作的列名

  

  IF (COLUMNS_UPDATED())

  

  判断提及的一列或多列是插入还是更新 仅用于 INTSERT 或 UPDATE 触发器中 COLUMNS_UPDATED 返回 varbinary 位模式 该位模式表示表的哪些列进行了插入操作 哪些列进行了更新操作

  

  可以在触发器主体中的任意位置使用 COLUMNS_UPDATED

  

  bitwise_operator

  

  是用于比较运算的位运算符

  

  updated_bitmask

  

  是整型位掩码 表示实际更新或插入的列 例如 表 t 包含列 C C C C 和 C 假定表 t 上有 UPDATE 触发器 若要检查列 C C 和 C 是否都有更新 指定值 若要检查是否只有列 C 有更新 指定值

  

  comparison_operator

  

  是比较运算符 使用等号 (=) 检查 updated_bitmask 中指定的所有列是否都实际进行了更新 使用大于号 (>) 来检查 updated_bitmask 中指定的列是否有进行过更新的 或者没有全部进行更新

  

  column_bitmask

  

  是要检查的列的整型位掩码

  

  说明 由于 Microsoft 不支持在系统表上添加用户定义触发器 所以建议不要在系统表上创建用户定义触发器

  

  

  通过表和视图上的 INSTEAD OF 触发器 ALTER TRIGGER 支持可手工更新的视图 Microsoft® SQL Server&# ; 以相同的方式对所有类型的触发器(AFTER INSTEAD OF)应用 ALTER TRIGGER

  

  可用 sp_settriggerorder 指定表上第一个和最后一个执行的 AFTER 触发器 在表上只能指定一个第一个执行及一个最后一个执行的 AFTER 触发器 如果该表上还有其它 AFTER 触发器 那么这些触发器将以未定义的顺序执行

  

  如果 ALTER TRIGGER 语句更改了第一个或最后一个触发器 则将除去已修改触发器上设置的第一个或最后一个特性 而且必须用 sp_settriggerorder 重置排序值

  

  只有当激发触发器的 SQL 语句(包括所有与被更新或删除对象有关的引用级联操作和约束检查)成功执行后 AFTER 触发器才会执行 AFTER 触发器操作要检查激发触发器的语句的运行结果(也包括所有由激发语句引起的 UPDATE 和 DELETE 引用级联操作)

  

  如果一个子表或引用表上的 DELETE 操作是由于父表的 CASCADE DELETE 操作所引起的 并且子表上定义了 DELETE 的 INSTEAD OF 触发器 那么将忽略该触发器并执行 DELETE 操作

  

  权限

  ALTER TRIGGER 的权限默认地授予 db_owner 和 db_ddladmin 固定数据库角色的成员 以及表所有者 这些权限是不可传递的

  

  示例

  下例首先创建一个触发器 当用户在表 roysched 中添加或更改数据时 该触发器向客户端打印一条用户定义消息 然后 使用 ALTER TRIGGER 语句使该触发器仅对 INSERT 活动有效 该触发器有助于提醒向表中插入行或更新行的用户及时通知书的作者和出版商

  

  USE pubs

  GO

  CREATE TRIGGER royalty_reminder

  ON roysched

  WITH ENCRYPTION

  FOR INSERT UPDATE

  AS RAISERROR ( )

  

   Now alter the trigger

  USE pubs

  GO

  ALTER TRIGGER royalty_reminder

  ON roysched

  FOR INSERT

  AS RAISERROR ( )

  

  消息 是 sysmessages 中的用户定义消息

ALTERTRIGGER

相关文章:

你感兴趣的文章:

标签云: