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

चयन/अद्यतन पर गतिरोध

यह काम करने के लिए लॉकिंग पर संकेत देने के लिए आपको एक क्रमिक लेनदेन करने के लिए पर्याप्त नहीं है।

क्रमिक अलगाव स्तर अभी भी आमतौर पर "सबसे कमजोर" प्रकार के लॉक का अधिग्रहण करेगा, जो यह सुनिश्चित कर सकता है कि क्रमिक शर्तों को पूरा किया जाए (दोहराए जाने योग्य रीड्स, कोई प्रेत पंक्तियाँ आदि नहीं)

तो, आप अपनी टेबल पर एक साझा लॉक को हथिया रहे हैं जिसे आप बाद में (अपने क्रमिक लेन-देन में) एक अपडेट लॉक। यदि कोई अन्य थ्रेड साझा लॉक धारण कर रहा है तो अपग्रेड विफल हो जाएगा (यदि कोई अन्य निकाय साझा लॉक नहीं रखता है तो यह काम करेगा)।

आप शायद इसे निम्नलिखित में बदलना चाहते हैं:

SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId

यह सुनिश्चित करेगा कि जब चयन किया जाता है तो एक अपडेट लॉक हासिल कर लिया जाता है (इसलिए आपको लॉक को अपग्रेड करने की आवश्यकता नहीं होगी)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL का उपयोग करके SQL सर्वर डेटाबेस का बैकअप कैसे लें

  2. SQL सर्वर (T-SQL उदाहरण) में 'डेटाटाइमऑफ़सेट' को 'डेटाटाइम' में बदलें

  3. SQL सर्वर में डुप्लिकेट पंक्तियाँ ढूँढना

  4. एसक्यूएल सर्वर जॉब्स को एक साथ चलाने से कैसे रोकें

  5. आप SQL तालिका में रिकॉर्ड की प्रतिलिपि कैसे बनाते हैं लेकिन नई पंक्ति की अद्वितीय आईडी को स्वैप कैसे करते हैं?