我有一個合併語句應該多次執行觸發器。合併語句和觸發器SQL Server 2012
我首先想到我的觸發器沒有執行,但是通過一些研究,我發現觸發器每個語句只觸發一次(觸發器是一個語句)。
但是所有的帖子都是舊的,我認爲現在可能有一個簡單的方法來讓我的觸發器執行多次。
那麼有什麼我可以添加到我的觸發器或我的合併聲明,使我的觸發器這樣做?
感謝
TRIGGER
TRIGGER [dbo].[Sofi_TERA_Trigger]
ON [dbo].[ZZ]
AFTER INSERT,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF EXISTS(SELECT 1 FROM inserted WHERE inserted.Statut LIKE '%CLOT%' OR inserted.Statut LIKE '%CLTT%' OR inserted.Statut LIKE '%CONF%')
BEGIN
DECLARE @Id int;
DECLARE @Matricule varchar(10);
DECLARE @IdAction int;
DECLARE @NumeroOF int;
SELECT @NumeroOF = inserted.Ordre from inserted;
DECLARE OF_CURSOR CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
SELECT Id,Log.Matricule,IdAction from Log inner join (select max(Id) as maxID,Matricule from LOG where Log.NumeroOF = @NumeroOF group by Matricule) maxID
on maxID.maxID = Log.Id where Log.NumeroOF = @NumeroOF;
OPEN OF_CURSOR
FETCH NEXT FROM OF_CURSOR INTO @Id,@Matricule,@IdAction
WHILE @@FETCH_STATUS = 0
BEGIN
IF @IdAction!=13
BEGIN
IF @IdAction<=2
BEGIN
insert into Log(NumeroOF,Matricule,IdAction,Date,EstAdmin) values (@NumeroOF,@Matricule,13,GETDATE(),1);
END
ELSE
BEGIN
insert into Log(NumeroOF,Matricule,IdAction,Date,EstAdmin) values (@NumeroOF,@Matricule,2,GETDATE(),1);
insert into Log(NumeroOF,Matricule,IdAction,Date,EstAdmin) values (@NumeroOF,@Matricule,13,GETDATE(),1);
END
END
FETCH NEXT FROM OF_CURSOR INTO @Id,@Matricule,@IdAction
END
CLOSE OF_CURSOR;
DEALLOCATE OF_CURSOR;
END
END
MERGE語句
Merge ZZ AS TARGET USING ZZTemp AS SOURCE
ON (Target.Operation=Source.Operation AND Target.Ordre=Source.Ordre)
WHEN MATCHED THEN
UPDATE SET TARGET.DateTERA=SOURCE.DateTERA, TARGET.MatTERA=SOURCE.MatTERA, TARGET.MatTERC=SOURCE.MatTERC
WHEN NOT MATCHED THEN
INSERT(Operation,Ordre,ElementOTP,Article,DesignationOF,PosteTravail,ValeurTemps,DHT,Statut,StatutOF,TexteActivite,DateTERA,MatTERA,MatTERC,StatutMat)
VALUES(SOURCE.Operation,SOURCE.Ordre,SOURCE.ElementOTP,SOURCE.Article,SOURCE.DesignationOF,SOURCE.PosteTravail,SOURCE.ValeurTemps,SOURCE.DHT,
SOURCE.Statut,SOURCE.StatutOF,SOURCE.TexteActivite,SOURCE.DateTERA,SOURCE.MatTERA,SOURCE.MatTERC,SOURCE.StatutMat);
爲什麼你想讓觸發器多次觸發? – Xedni
因爲對於在我的表「ZZ」中添加的每一行,我可能需要在另一個表中添加新的:) –
並且合併更新/插入約。 2000 rows –