Как определить, есть ли вставка или обновление
Всякий раз, когда 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;