मैं एक ही टेबल पर उसी ईवेंट पर आग लगने वाले दो ट्रिगर्स के बीच समस्याओं को लॉक करने से कैसे रोक सकता हूं?एक ही तालिका के लिए दो अलग-अलग अपडेट ट्रिगर्स
डीबी मैं काम कर रहा हूं पहले से ही एक अपडेट ट्रिगर है जो एन्क्रिप्ट किया गया है और इसलिए मैं इसे संशोधित नहीं कर सकता। मैंने कुछ नए कार्यों को पूरा करने के लिए एक और अपडेट ट्रिगर बनाया है, जब मैं सीधे डेटाबेस पर इसका परीक्षण करता हूं तो यह ठीक से काम कर रहा है, लेकिन जब मैं फ्रंट एंड एप्लिकेशन पर किसी उत्पाद को अद्यतन करता हूं तो विफल रहता है। जाहिर है, जब मेरे ट्रिगर सक्रिय होते हैं तो दोनों ट्रिगर विफल हो जाते हैं। मुझे जो संदेश मिलता है वह कुछ है जैसे "दस्तावेज़ पहले से ही खुला है, मैं इसका मूल्य बढ़ा दूंगा"।
क्या यह एक लॉकिंग मुद्दा है?
एक related question है जहां कोई कहता है कि हमारे पास एक टेबल पर एक से अधिक ट्रिगर (एक ही ईवेंट के लिए) हो सकते हैं।
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
किसी भी मदद की सराहना की जाएगी:
यहाँ मेरी चलाता कोड है।
अद्यतन: डेटाबेस MSSQL 2008
क्या आप ** सटीक ** त्रुटि संदेश (या कम से कम त्रुटि संख्या अगर संदेश अंग्रेजी में नहीं है) दे सकते हैं। "दस्तावेज़ पहले से खुला है, मैं इसका मूल्य बढ़ा दूंगा" SQL सर्वर त्रुटि संदेश की तरह नहीं लगता है। –
मुझे उस संदेश के अलावा कोई अन्य नहीं मिलता है, यह एक त्रुटि के रूप में भी नहीं दिखाया गया है बल्कि एक सूचना संदेश है।यदि यह प्रासंगिक है तो ऑपरेशन उत्पाद स्टॉक अपडेट है। – Fabio
यदि इसका उत्पादन है, तो ऐप लॉग की जांच करें, इसे कहीं भी लिखा जाना है, अगर डीबी पर प्रोफाइलर नहीं चलाएं और देखें कि – WKordos