不知道楼主所说的区别是吗?在功能上是没有什么区别的,但可能在语法上是有一些差异的了:SQL SERVER CREATE TRIGGER
创建触发器,触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。Microsoft® SQL Server™ 允许为任何给定的 INSERT、UPDATE 或 DELETE 语句创建多个触发器。语法
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 ] 
    } 
} ORACLE   CREATE OR REPLACE TRIGGER customerid_update
BEFORE  DELETE  OR UPDATE
ON customer
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
    ls_pricetype char(10);Begin
    ls_osuserid := sys_context('USERENV','OS_USER');
     IF DELETING THEN
 
     ELSE
      IF UPDATING('CUSTOMERID') OR UPDATING('NAME') THEN
      ---
      END IF;
    END IF;
End;

解决方案 »

  1.   

    sql sever与oracle触发器语法有重大区别
    sql server:
    只一种触发器形式,而在触发体来可以实现像oracle行级别触发器的效果
    CREATE TRIGGER trigger_name 
    ON  a
    FOR  before INSERT , UPDATE
    as
    select * from a,inserted where ....;   --行级别
    ...
    end;oracle:
    CREATE TRIGGER trigger_name 
    before INSERT or UPDATE on a
    as
    begin
    select ... from a where ...
    end;
    /这一点上务必要记紧
      

  2.   

    sqlserver 要读取修改前和修改后的值是访问deleted,inserted表来获取.
    oracle  直接可以在每个需要读取的列名加入 :old,:new 就可以了.
    还有就是oracle和sqlserver 触发器工作的模式有些不一样.特别是sqlserver大批量数据进行update触发的时候,你就知道了.