CREATE TRIGGER trigger_name 
ON { table | view } 
[ WITH ENCRYPTION ] 
{
    { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
        [ WITH APPEND ]
        [ 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 ] 
    } 

问下 FOR | AFTER | INSTEAD OF  这3个分别是指什么?

解决方案 »

  1.   

    for--操作之做的动作
    after 操作成功才激发。
    insert 操作之前判断联机帮助上写得说细点:
    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 触发器。
      

  2.   

    SQL Server 2000 支持两种类型的触发器:
    AFTER 触发器和INSTEAD OF 触发器。AFTER 触发器(也叫“FOR”触发器)会在触发 insert、update 或是delect 动作之后执行
    该类型触发器要求只有执行某一操作(INSERT UPDATE DELETE) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。INSTEAD OF 触发器表示并不执行其所定义的操作(INSERT、 UPDATE、 DELETE),而仅是执行触发器本身。
    INSTEAD OF 触发器有一个很大的特点——就是它允许你在某个表或视图上用多个复杂的查询操作来代替单一的查询
    对同一操作只能定义一个INSTEAD OF触发器。
      

  3.   

    FOR   ¦   AFTER   ¦   INSTEAD   OF     
    FOR与AFTER是一样的,都是表插入,删除,更新执行后再触发,
    instead of 为替代触发
    就是只执行触发器中的内容,不执行表插入,删除,更新语句