Просьба помочь, я пытался создать триггер обновления, чтобы вставлять данные в определенную таблицу, когда она обновляется с определенным значением. "Принято". по несколько урезонить триггер не стреляяSQL Server After Update Trigger 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
[email protected]_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
Добавить вставку в произвольную таблицу аудита, чтобы просто посмотреть, что увольняют, то есть до вашего IF, чтобы что IF не останавливает выполнение кода. Возможно, даже добавьте больше одной вставки, чтобы увидеть, где ее «выбросили». –
@BethuelMhiongo, не должен ли триггер ПОСЛЕ ОБНОВЛЕНИЯ в вашем случае? –
Вы определили триггер 'AFTER INSERT' - это будет срабатывать после любого **' INSERT' ** - не 'UPDATE'! Вам нужен триггер 'AFTER UPDATE' ... –