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

पंक्ति ताले - मैन्युअल रूप से उनका उपयोग करना

मैं जिस तरह के दृष्टिकोण की सिफारिश करूंगा, वह यह है कि रिकॉर्ड में एक फ़ील्ड होना चाहिए जो इंगित करता है कि रिकॉर्ड संसाधित किया जा रहा है या नहीं। फिर "कतार से आगे पढ़ें" स्पोक लागू करें जो निम्न कार्य करता है, यह सुनिश्चित करने के लिए कि कोई भी 2 प्रक्रियाएं समान रिकॉर्ड न लें:

BEGIN TRANSACTION

-- Find the next available record that's not already being processed.
-- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't 
-- grab the same record, and that processes don't block each other.
SELECT TOP 1 @ID = ID
FROM YourTable WITH (UPDLOCK, READPAST)
WHERE BeingProcessed = 0

-- If we've found a record, set it's status to "being processed"
IF (@ID IS NOT NULL)
    UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID

COMMIT TRANSACTION

-- Finally return the record we've picked up
IF (@ID IS NOT NULL)
    SELECT * FROM YourTable WHERE ID = @ID

इन तालिका संकेतों पर अधिक जानकारी के लिए, देखें MSDN



  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 का उपयोग करके SQL सर्वर 2005 छवि फ़ील्ड में चित्र सम्मिलित करें

  3. SQL सर्वर में हटाए गए डेटाबेस को ट्रैक करने के तरीके

  4. DELETE CASCADE पर जोड़ने के लिए सभी विदेशी कुंजियों को बदलने के लिए SQL स्क्रिप्ट

  5. SQL सर्वर 2008 नव निर्मित उपयोगकर्ता के साथ लॉगिन नहीं कर सकता