在触发器中不能使用if  elseif  endif
或if endif语句吗

解决方案 »

  1.   

    1.内部是事务处理
    2.同一类型的没必要建两个
    3.用的是:
    if
    begin
    ...
    end
    else
    begin
    ...
    end
      

  2.   

    if ...then
    begin
    ...
    end
    else
    begin
    ...
    end
    endif
    好象不能用呀,提示有语法错误
      

  3.   

    可用 sp_settriggerorder 指定表上第一个和最后一个执行的 AFTER 触发器。在表上只能为每个 INSERT、UPDATE 和 DELETE 操作指定一个第一个执行和一个最后一个执行的 AFTER 触发器。如果同一表上还有其它 AFTER 触发器,则这些触发器将以随机顺序执行。如果 ALTER TRIGGER 语句更改了第一个或最后一个触发器,则将除去已修改触发器上设置的第一个或最后一个特性,而且必须用 sp_settriggerorder 重置排序值。只有当触发 SQL 语句(包括所有与更新或删除的对象关联的引用级联操作和约束检查)成功执行后,AFTER 触发器才会执行。AFTER 触发器检查触发语句的运行效果,以及所有由触发语句引起的 UPDATE 和 DELETE 引用级联操作的效果。
      

  4.   

    sp_settriggerorder
    指定第一个或最后一个激发的、与表关联的 AFTER 触发器。在第一个和最后一个触发器之间激发的 AFTER 触发器将按未定义的顺序执行。语法
    sp_settriggerorder[@triggername = ] 'triggername'
        , [@order = ] 'value'
        , [@stmttype = ] 'statement_type' 参数
    [@triggername =] 'triggername'是将要设置或更改顺序的触发器的名称。triggername 的数据类型为 sysname。如果此名称与触发器不对应或此名称对应于 INSTEAD OF 触发器,该过程将返回错误。[@order =] 'value'是新触发器顺序的设置。value 的数据类型为 varchar(10),可以是下列值中的任何一个。重要  First 和 Last 触发器必须是两个不同的触发器。 
    值 描述 
    First 最先激发的触发器。 
    Last 最后激发的触发器。 
    None 以未定义的顺序激发的触发器。 
    [@stmttype = ] 'statement_type'指定哪条 SQL 语句激发触发器。statement_type 的数据类型为 varchar(10),可以是 INSERT、UPDATE 或 DELETE。只有在触发器已经定义为某种语句类型的触发器后,才能将其指派为该语句类型的 First 或 Last 触发器。例如,如果 TR1 定义为 INSERT 触发器,则可以将表 T1 上的 INSERT 触发器 TR1 指派为 First 触发器。如果将只定义为 INSERT 触发器的 TR1 设置为 UPDATE 语句的 First(或 Last)触发器,则 SQL Server 将返回错误信息。有关更多信息,请参见注释部分。返回代码值
    0(成功)或 1(失败)注释
    单个表上的每个 INSERT、UPDATE 或 DELETE 语句只能有一个 First 和一个 Last 触发器。如果在表上已定义了 First 触发器,则不能指派新触发器作为同一操作(INSERT、UPDATE 或 DELETE)的同一表的 First 触发器。此限制也适用于 Last 触发器。作为 SQL Server 复制的一部分,可在已发布表上指派 First 触发器;然而,如果与用户定义的触发器存在冲突,则必须在表发布之前将用户定义触发器的指派更改为 None。如果 ALTER TRIGGER 语句更改第一个或最后一个触发器,则除去最初在触发器上设置的 First 或 Last 特性,并且替换为 None。顺序值必须用 sp_settriggerorder 重新设置。如果必须将同一触发器指派为多个语句类型的第一个或最后一个顺序,则必须为每个语句类型执行 sp_settriggerorder。而且,在可以将触发器指派为某个语句类型激发的 First 或 Last 触发器之前,必须先将其定义为该语句类型。 权限
    触发器所有者以及在其上定义触发器的表所有者拥有 sp_settriggerorder 的执行许可权限。当前数据库中的 db_owner 和 db_ddladmin 角色成员以及 sysadmin 服务器角色成员可以执行该存储过程。示例
    sp_settriggerorder @triggername= 'MyTrigger', @order='first', @stmttype = 'UPDATE'©1988-2000 Microsoft Corporation。保留所有权利。
      

  5.   

    例:我有三张表A、B、C
                表A的字段分别为A1、A2、A3、A4、A5
                表B的字段分别为B1、B2、B3
                表C的字段分别为C1、C2、C3
    CREATE TRIGGER TEST_Trigger1
    ON A
    FOR insert
    AS
    if A5=1 then
    BEGIN
    insert into (B1,B2,B3)
      SELECT A1,A2,A3 FROM inserted
    END
    else
    BEGIN
    insert into C(C1,C2,C3)
      SELECT A1,A2,A3 FROM inserted
    END
    endif
    请问各位大侠该语法错在哪里!
      

  6.   

    去掉endif也是提示语法有误的呀
      

  7.   

    if A5=1 then
    ——》没有then
    if A5=1
    insert into (B1,B2,B3)
    ——》没有表名
    insert into B(B1,B2,B3)