Deux différents déclencheurs de mise à jour pour le même tableau

Comment puis-je prévenir les problèmes de verrouillage entre les deux déclencheurs qui se déclenche lors de la même manifestation sur la même table?

La DB je suis en train de travailler sur a déjà un déclencheur de mise à jour sont cryptées et donc je ne peut pas le modifier. J'ai fait un autre déclencheur de mise à jour pour accomplir de nouvelles tâches, il fonctionne correctement quand je l'ai tester directement sur la base de données, mais ne parvient pas quand je fais une mise à jour d'un produit sur l'application front-end. Apparemment, quand j'ai mon déclencheur active les deux déclencheurs échoue. Le message que je reçois est quelque chose comme "le Document est déjà ouvert, je vais l'incrémenter la valeur".

Est-ce un problème de verrouillage?

Il y a un une question relative à la où quelqu'un dit que nous pouvons avoir plus d'un déclencheur (pour le même événement) sur une table.

Voici mon déclenche code:

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 

Toute aide serait appréciée.

Mise à jour: Base de données MSSQL 2008

  • Pouvez-vous donner le exact message d'erreur (ou au moins le numéro d'erreur si le message n'est pas en anglais). "Le Document est déjà ouvert, je vais l'incrémenter la valeur" ne ressemble pas à un message d'erreur SQL Server.
  • Je n'obtenez pas tout autre que ce message, il n'est même pas montré comme une erreur, mais un message d'information. L'opération est produit en stock mise à jour si elle est pertinente.
  • si sa production, de vérifier l'application se connecte il a écrit quelque part , si pas exécuter de profils sur la base de données et voir ce qui se passe
InformationsquelleAutor Fabio | 2013-01-18