क्या पीके प्राथमिक कुंजी है? फिर यह कोई मुद्दा नहीं है, यदि आप पहले से ही प्राथमिक कुंजी जानते हैं तो कोई खेल नहीं है। अगर पीके है प्राथमिक कुंजी, फिर यह स्पष्ट प्रश्न पूछता है कैसे क्या आप आइटम का pk dequeue करना जानते हैं...
समस्या यह है कि यदि आप नहीं प्राथमिक कुंजी को जानें और अगले 'उपलब्ध' (यानी स्थिति =y) को हटाना चाहते हैं और इसे dequeued के रूप में चिह्नित करना चाहते हैं (इसे हटाएं या स्थिति =z सेट करें)।
ऐसा करने का उचित तरीका एकल कथन का उपयोग करना है। दुर्भाग्य से सिंटैक्स Oracle और SQL सर्वर के बीच भिन्न होता है। SQL सर्वर सिंटैक्स है:
update top (1) [<table>]
set status = z
output DELETED.*
where status = y;
मैं SQL के OUTPUT एक के समान उदाहरण देने के लिए Oracle के रिटर्निंग क्लॉज से पर्याप्त परिचित नहीं हूं।
अन्य SQL सर्वर समाधानों को सही होने के लिए SELECT (UPDLOCK के साथ) पर लॉक संकेतों की आवश्यकता होती है। Oracle में प्रीफ़र्ड एवेन्यू फॉर UPDATE का उपयोग करता है, लेकिन यह SQL सर्वर में काम नहीं करता है क्योंकि FOR UPDATE को SQL में कर्सर के साथ संयोजन के रूप में उपयोग किया जाना है। ।
किसी भी मामले में, मूल पोस्ट में आपका व्यवहार गलत है। एकाधिक सत्र सभी एक ही पंक्ति (पंक्तियों) का चयन कर सकते हैं और यहां तक कि सभी इसे अपडेट कर सकते हैं, एक ही हटाए गए आइटम को एकाधिक पाठकों को वापस कर सकते हैं।