2015-06-09 4 views
0

Привет, как я могу переписать этот триггер с сервера oracle на sql?Trigger From Oracle to SQL SERVER

CREATE OR REPLACE TRIGGER COUNTER 
BEFORE INSERT OR UPDATE OF some_column ON my_table 
FOR EACH ROW 
BEGIN 

    :NEW.My_counter := :NEW.My_counter+1; 
    :NEW.value := :NEW.value+1; 

END; 

Спасибо за помощь.

+1

Мы не являемся сервисом перевода кода. –

ответ

-1
CREATE TRIGGER trig_update 
ON <table_name> or <database_name> 
Instead of INSERT, UPDATE, DELETE /*made this instead of as I see your saying Before*/ 
AS 
Being 
<your sql code> 
end; 
1

Oracle, безусловно, более элегантный и в этом случае ... Вот то, что вы можете попробовать:

CREATE TRIGGER counter_trigger 
    ON my_table AFTER INSERT, UPDATE 
AS 
BEGIN 
    update t 
    set t.my_counter +=1, 
     t.value += 1 
    from my_table t 
    where exists (-- restrict to inserted or updated rows ... 
     select null 
     from inserted i 
     where i.Id = t.Id 
    ) and (exists (-- ... where the specific column was updated 
      select null 
      from deleted d 
      where d.Id = t.Id 
      and d.some_column <> t.some_column -- add some form of coalesce here if column is nullable. 
     ) 
      or not exists (-- ... or the whole row was inserted. 
      select null 
      from deleted d 
      where d.Id = t.Id 
     ) 
    ); 
END 
GO 

выше делает следующие предположения. Если это не так, вам придется немного изменить код:

  • В таблице есть столбец первичного ключа с именем Id.
  • some_column не может быть опущен. Если это так, отрегулируйте условие для учета нулей.
  • У вашей базы данных установлен набор recursive triggers enabled, установленный в false. Если вы не знаете об этой настройке, вы, вероятно, все в порядке.