Come posso evitare problemi di blocco tra due trigger che si attivano sullo stesso evento sulla stessa tabella?Due diversi trigger di aggiornamento per la stessa tabella
Il DB su cui sto lavorando ha già un trigger di aggiornamento crittografato e pertanto non posso modificarlo. Ho fatto un altro trigger di aggiornamento per eseguire alcune nuove attività, funziona correttamente quando eseguo il test direttamente sul database, ma non riesco quando faccio un aggiornamento a un prodotto sull'applicazione front-end. Apparentemente, quando ho il mio trigger attivo, entrambi i trigger falliscono. Il messaggio che ottengo è qualcosa come "Documento già aperto, incrementerò il suo valore".
Si tratta di un problema di blocco?
C'è un related question dove qualcuno dice che possiamo avere più di un trigger (per lo stesso evento) su un tavolo.
Ecco il mio codice trigger:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[tr_st_rep_update]
ON [dbo].[st]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF (update(ref)
OR update(design)
OR update(u_update)
OR update(u_ativo)
OR update(stock)
OR update(epv1)
OR update(epv2)
OR update(epv3)
OR update(peso)
OR update(u_catnv1)
OR update(u_catnv2)
OR update(u_catnv3)
OR update(u_dpromoi)
OR update(u_dpromof)
OR update(u_destaque))
BEGIN
IF (SELECT count(*)
FROM Inserted
INNER JOIN Deleted
ON Inserted.ststamp = Deleted.ststamp
WHERE inserted.u_ativo = 1
OR (Deleted.u_ativo = 1
AND Inserted.u_ativo = 0)) > 0
BEGIN
INSERT INTO RepData
(id,
REF,
familia,
stock,
epv1,
epv2,
epv3,
peso,
u_accao,
imagem,
process)
SELECT Inserted.ststamp AS id,
Inserted.REF AS REF,
Inserted.familia AS familia,
Inserted.stock AS stock,
Inserted.epv1 AS epv1,
Inserted.epv2 AS epv2,
Inserted.epv3 AS epv3,
Inserted.peso AS peso,
CASE
WHEN Deleted.u_ativo = 1
AND Inserted.u_ativo = 0 THEN 'd'
ELSE 'u'
END AS u_accao,
Inserted.imagem AS imagem,
0 AS process
FROM Inserted
INNER JOIN Deleted
ON Deleted.ststamp = Inserted.ststamp
WHERE inserted.u_ativo = 1
OR (Deleted.u_ativo = 1
AND Inserted.u_ativo = 0)
END
END
END
Qualsiasi aiuto sarebbe apprezzato.
Aggiornamento: Database MSSQL 2008
Puoi fornire il messaggio di errore ** esatto ** (o almeno il numero di errore se il messaggio non è in inglese). "Il documento è già aperto, incrementerò il suo valore" non sembra un messaggio di errore di SQL Server. –
Non ottengo altro che quel messaggio, non è nemmeno mostrato come un errore ma un messaggio informativo.L'operazione è l'aggiornamento delle scorte del prodotto se pertinente. – Fabio
se la sua produzione, controllare i registri delle app che deve scrivere da qualche parte, se non eseguire profiler sul db e vedere cosa sta succedendo – WKordos