में लेनदेन का उपयोग कब करें लेनदेन का उपयोग करने के लिए बहुत सारे प्रश्न हैं। मैं क्या जानना चाहता हूं WHEN? किस परिस्थिति में? किस प्रकार के प्रश्न? कोशिश कर सकते हैं-बजाय ब्लॉक पर्याप्त पकड़ सकते हैं? आदि ...SQL सर्वर
मैंने ~ 20 टेबल और ~ 20 संग्रहीत प्रक्रियाओं के साथ एक डेटाबेस तैयार किया है। वर्तमान में मेरे एसपी में से कोई भी लेनदेन का उपयोग नहीं करता है, लेकिन पूरे प्रयास में कई प्रयास-कैच ब्लॉक हैं। इसका कारण यह है कि हर बार जब मैंने उन्हें लेन-देन में लपेटने की कोशिश की तो एसपी काम करना बंद कर देगी और मैं ट्रांस का उपयोग करने के बजाय गायब डेटा और बदतर से समाप्त हो जाऊंगा।
तो फिर ...
- जब एक उपयुक्त समय कोई लेन-देन का उपयोग है?
- एक फॉलो-अप प्रश्न के रूप में, यदि मैं उनका उपयोग करता हूं, तो मैं उन तरीकों से कैसे उपयोग कर सकता हूं जैसे कि अन्य एसपी को एक ही समय में उसी डेटा तक पहुंचने से रोकने के लिए भ्रष्टाचार को रोकने के बजाय मेरे एसपी बिल्कुल काम नहीं करने के लिए?
यह एक छोटा सा नमूना सपा मैं एक उत्पाद का नाम बदलने के लिए लिखा था है:
CREATE PROCEDURE spRenameProduct
@pKey int = NULL,
@pName varchar(50)
AS
BEGIN
BEGIN TRY
IF LTRIM(RTRIM(@pName)) = '' SET @pName = NULL
IF NOT @pKey IS NULL AND NOT @pName IS NULL BEGIN
declare @pKeyExisting int = (select MIN(ID) from rProduct where Product like @pName and not ID = @pKey)
IF @pKeyExisting is null BEGIN
update rProduct set IsValid = 1, Product = @pName where ID = @pKey
END ELSE BEGIN
update Request set ProductID = @pKeyExisting where ProductID = @pKey
update StatusReport set ProductID = @pKeyExisting where ProductID = @pKey
delete from rProduct where ID = @pKey
END
END
END TRY BEGIN CATCH END CATCH
END
अब क्या हुआ अगर दो लोगों को सटीक एक ही समय में इस का उपयोग कर रहे थे? मैं वास्तव में नहीं चाहता, और न ही मेरे पास समय है (दुर्भाग्य से), फैंसी पाने के लिए। चुम्मा। इस मामले में सबसे अच्छा है। :)
आप लेनदेन के साथ अलगाव स्तर मिश्रण कर रहे हैं। अलगाव के साथ आप उस एकल कथन की अवधि के लिए अन्य अपडेट लॉक कर सकते हैं। यदि आपको या तो आगे बढ़ने या विफल होने के लिए अपडेट का एक सेट चाहिए तो आप उन्हें लेनदेन में लपेटें। यदि आप दो अपडेट चाहते हैं और एक सिंक में रहने के लिए हटाते हैं तो लेनदेन क्या कर सकता है। – Paparazzi
@ बलामबालम तो दूसरे शब्दों में यह केवल दो अपडेट लपेटने और एक लेनदेन में एक हटाने के लिए समझ में आता है, लेकिन हमेशा पूरे एसपी को लपेटने से मुझे लगता है कि मुझे लगता है कि ज्यादा समझ में नहीं आता है? फिर भी, मुझे लगता है कि ट्रांस कभी-कभी काम करने के लिए बहुत बोझिल हो सकता है क्योंकि डेवलपर्स कभी-कभी गलतियां करते हैं। मैं नहीं चाहता कि ऐप सिर्फ एक हानिकारक अपवाद जैसे शून्य संदर्भ या कुछ के कारण असफल हो। ज्ञान के किसी भी शब्द? इस पर अभी भी नया :) – Chiramisu
मुझे नहीं पता कि यह कैसे स्पष्ट है। यदि आपको असफल होने या पूरी तरह सफल होने के लिए सेट की आवश्यकता है तो उसे लेनदेन में लपेटें। क्लासिक उदाहरण चेकिंग से बचत खाते में धन हस्तांतरण होता है - यदि जमा विफल हो जाता है तो मैं वापसी को विफल करना चाहता हूं। यदि डेवलपर गलती के कारण सिंक से डेटा ठीक है तो लेनदेन का उपयोग न करें। – Paparazzi