Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एक नेस्टेड लेनदेन क्यों किया जाता है, भले ही TransactionScope.Complete () को कभी नहीं कहा जाता है?

सबसे पहले, एसक्यूएल सर्वर में नेस्टेड लेनदेन जैसी कोई चीज नहीं है . यह महत्वपूर्ण है।

दूसरा, दोनों TransactionScopes conn1 का उपयोग करते हैं, इसलिए आप (SQL सर्वर स्तर पर) @@TRANCOUNT में वृद्धि कर रहे हैं प्रत्येक के लिए BEGIN TRANSACTION

सरल व्याख्या:आंतरिक लेन-देन तब किया जाता है जब बाहरी लेन-देन होता है क्योंकि आंतरिक को वापस रोल करने से दोनों रोलबैक हो जाएंगे लेन-देन

यानी, COMMIT TRANSACTION (.Complete और .Dispose ) कमी @@TRANCOUNT जबकि ROLLBACK TRANSACTION (.Dispose केवल) इसे वापस शून्य पर ले जाता है। इसलिए "नेस्टेड ट्रांजैक्शन जैसी कोई चीज़ नहीं" के कारण आंतरिक रोलबैक दबा दिया जाता है

यदि आप आंतरिक 'स्कोप में conn2 का सही ढंग से उपयोग करते हैं तो यह अपेक्षा के अनुरूप काम करेगा क्योंकि 2 लेनदेन डेटाबेस सर्वर स्तर पर असंबंधित हैं। यह कहाँ मायने रखता है...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सी # का उपयोग कर स्क्रिप्ट कार्य में चर लॉक करें

  2. SQL सर्वर (T-SQL) में एक विभाजित तालिका बनाएँ

  3. SQL सर्वर (T-SQL) में गलत पासवर्ड के कारण लॉगिन के लिए असफल लॉगिन प्रयासों की संख्या प्राप्त करें

  4. एमएस-एक्सेस फ्रंट-एंड एसक्यूएल सर्वर से तारीखों को नहीं पहचानता है

  5. एक एसक्यूएल चर के लिए निष्पादन परिणाम कैसे असाइन करें?