मैं की तरह एक परमाणु लेन-देन लागू करना चाहते हैं निम्नलिखित:मुझे कौन से लॉक संकेतों का उपयोग करना चाहिए (टी-एसक्यूएल)?
BEGIN TRAN A
SELECT id
FROM Inventory
WITH (???)
WHERE material_id = 25 AND quantity > 10
/*
Process some things using the inventory record and
eventually write some updates that are dependent on the fact that
that specific inventory record had sufficient quantity (greater than 10).
*/
COMMIT TRAN A
समस्या देखते हैं कि अन्य लेन-देन हो रहा है कि हमारे सूची से मात्रा उपभोग करते हैं, समय के बीच इतना है कि रिकॉर्ड चयन किया जाता है और अद्यतन लिखा जाता है लेनदेन में ए रिकॉर्ड एक अमान्य चयन बन सकता है क्योंकि यह WHERE खंड में दहलीज के नीचे मात्रा कम हो सकती है।
तो प्रश्न यह है कि मैंने अपने अद्यतनों को पूरा करने और लेनदेन करने से पहले चयनित सूची रिकॉर्ड को बदलने से रोकने के लिए इन खंडों में लॉकिंग संकेतों का उपयोग करना चाहिए?
संपादित करें: तो जॉन के लिए धन्यवाद, एक अच्छा समाधान लेनदेन अलगाव स्तर को दोहराने के लिए सेट करना प्रतीत होता है। यह सुनिश्चित करेगा कि "कोई अन्य लेन-देन डेटा को संशोधित नहीं कर सकता है जो वर्तमान लेनदेन द्वारा पढ़ा गया है जब तक कि वर्तमान लेनदेन पूरा नहीं हो जाता।"
अच्छा सवाल है ... मैं कुछ कोड पर काम करने जा रहा हूँ कि वास्तव में फिट बैठता है यह मानदंड जल्द ही ... मुझे यह भी एहसास नहीं हुआ कि यह एक मुद्दा था :) –
धन्यवाद एंड्रयू! हाँ यह मेरे लिए हुआ कि एक लेनदेन वास्तव में एक सतत परिणाम नहीं दे रहा है अगर डेटा या लेनदेन का उपयोग कर रहे अनुमानों को बदल रहा है, जबकि यह प्रसंस्करण हो रहा है। – Daniel