Как определить, есть ли вставка или обновление

Всякий раз, когда INSERT происходит в таблице CUSTOMER, мне нужно вызвать " StoredProcedure1" и UPDATE происходит в таблице CUSTOMER, мне нужно вызвать " StoredProcedure2" в Trigger. Как определить, есть ли вставка или обновление в триггере из SQL Server 2008.

Кто-нибудь может мне помочь, как решить?

Код:

CREATE TRIGGER Notifications ON CUSTOMER
FOR INSERT,UPDATE
AS
BEGIN
DECLARE @recordId varchar(20);
set @recordId= new.Id;
    //if trigger is insert at the time I call to SP1
        EXEC StoredProcedure1 @recordId
    //if trigger is Upadeted at the time I call to SP2
        EXEC StoredProcedure2 @recordId
END

Ответ 1

Самый простой способ решить эту проблему - иметь два триггера: один для вставки и один для обновления.

CREATE TRIGGER InsertNotifications ON CUSTOMER
FOR INSERT
AS
BEGIN
DECLARE @recordId varchar(20);
set @recordId= new.Id;
    //if trigger is insert at the time I call to SP1
        EXEC StoredProcedure1 @recordId

END

CREATE TRIGGER UpdateNotifications ON CUSTOMER
FOR UPDATE
AS
BEGIN
DECLARE @recordId varchar(20);
set @recordId= new.Id;
    //if trigger is Upadeted at the time I call to SP2
        EXEC StoredProcedure2 @recordId
END

Ответ 2

Попробуйте этот код для триггера для INSERT, UPDATE и DELETE. Это отлично работает в Microsoft SQL Server 2008

if (Select Count(*) From inserted) > 0 and (Select Count(*) From deleted) = 0
begin
   print ('Insert...')
end

if (Select Count(*) From inserted) = 0 and (Select Count(*) From deleted) > 0
begin
   print ('Delete...')
end

if (Select Count(*) From inserted) > 0 and (Select Count(*) From deleted) > 0
begin
   print ('Update...')
end

Ответ 3

В INSERT таблица виртуальных DELETED будет пуста.

Ответ 4

Пусть SQL Server - это SQL Server, и пусть он работает для вас!

Создайте отдельные триггеры для каждого события изменения (вставьте, обновите и/или удалите). Положите логику для каждого в триггер, который в ней нуждается. Нет необходимости проверять тип события.

И не вызывать процедуру, если она не быстро, быстро и не может блокировать других.

Ответ 5

create or replace trigger comp
before
insert or delete or update
on student
referencing old as o new as n
for each row
begin
  if deleting then
           insert into student_backup values
      (:o.studid,:o.studentname,:o.address,:o.contact_no,:o.branch,sysdate);
  end if;
  if inserting then
        insert into student_backup values
      (:n.studid,:n.studentname,:n.address,:n.contact_no,:n.branch,sysdate);
 end if;
  if updating then
       insert into student_backup values
      (:o.studid,:o.studentname,:o.address,:o.contact_no,:o.branch,sysdate);
  end if;
end comp;