Reputation: 47
Kindly help, I have been trying to create an update trigger to insert data into a specific table once it's updated with a certain value. "Accepted". for somewhat reason the trigger is not firing
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[TRGIU_CLEARING_SAMPLE_RESULT]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
DROP TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT]
GO
CREATE TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT] ON [dbo].[CLEARING_BATCH]
AFTER INSERT
AS
IF UPDATE(QM_STATUS)
BEGIN
Declare @QM_Status Varchar(12),
@QM_Status_Old Varchar(12),
@Submission_Pk Uniqueidentifier
SELECT @QM_Status = I.QM_STATUS,
@QM_Status_old = D.QM_STATUS,
@Submission_Pk = I.PK
--@Lab_used = LE.ID
FROM CLEARING_BATCH CB
LEFT JOIN SAMPLE_RESULT SR ON CB.PK = SR.PPK
JOIN INSERTED I ON SR.PK = I.PPK
JOIN DELETED D ON I.PK = D.PK
IF(@QM_Status = 'Accepted' and (@QM_Status <> @QM_Status_old or @QM_Status_old is null))
begin
INSERT INTO BATCH(PPK,BATCH_ID)
SELECT CB.PK,CB.BATCH_ID
FROM LABORATORY L
JOIN CLEARING_BATCH CB ON L.PK = CB.PPK
JOIN CLEARING_SAMPLE_RESULT CSR ON CB.PK = CSR.PPK
LEFT JOIN BATCH B ON CB.PK = B.PPK
WHERE B.PPK IS NULL
UPDATE BATCH
SET BATCH_ID = CB.BATCH_ID
FROM BATCH B
JOIN CLEARING_BATCH CB ON B.PPK = CB.PPK
END
end
GO
Upvotes: 1
Views: 1862
Reputation: 754388
You have an AFTER INSERT
trigger
CREATE TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT]
ON [dbo].[CLEARING_BATCH]
AFTER INSERT
AS
which will fire after any INSERT
statement that inserts new rows - this will NOT be fired when you UPDATE
something!
If you want to capture the UPDATE
operations, you need an AFTER UPDATE
trigger instead:
CREATE TRIGGER [dbo].[TRGIU_CLEARING_SAMPLE_RESULT]
ON [dbo].[CLEARING_BATCH]
AFTER UPDATE
AS
....
Upvotes: 1