मैं एक संग्रहीत प्रक्रिया है कि मूल्यों मेरी अस्थायी तालिका का चयन करता है और उन्हें इतना की तरह डेटाबेस में सम्मिलित करता चल रहा हूँ:INSERT INTO .. का चयन करें .. अद्वितीय बाधा उल्लंघन
INSERT INTO emails (EmailAddress) (
SELECT
DISTINCT eit.EmailAddress
FROM #EmailInfoTemp eit
LEFT JOIN emails ea
ON eit.EmailAddress = ea.EmailAddress
WHERE ea.EmailAddressID IS NULL )
दुर्लभ मामलों पर (~ एक बार हर दो एक सर्वर पर घंटों का जो हजारों अनुरोधों को एक मिनट में संभालता है), तो मुझे ईमेल एड्रेस कॉलम पर एक इंडेक्स पर एक अद्वितीय बाधा त्रुटि "अद्वितीय कुंजी बाधा का उल्लंघन" प्राप्त होता है।
मैं पुष्टि कर सकता हूं कि मैं डुप्लिकेट मानों में गुजर रहा हूं। यहां तक कि अगर मैं था, तो इसे DISTINCT द्वारा पकड़ा जाना चाहिए।
-SQL सर्वर 2008 -Stored proc + लेनदेन का उपयोग नहीं कर + JDBC callablestatement
यह हो सकता है कि चयन करें और आगामी सम्मिलित करें के बीच, वहाँ एक ही/अलग संग्रहीत proc कि एक सम्मिलित पूरा करने के लिए एक और फोन था समान डेटा के साथ? यदि हां, तो इसे रोकने का सबसे अच्छा तरीका क्या होगा?
कुछ विचार: हमारे पास "क्लाइंट" के कई डुप्लिकेट उदाहरण हैं जो इस SQL सर्वर के साथ एक बार उत्पादन में संवाद करते हैं, इसलिए मेरी पहली प्रतिक्रिया एक सहमति थी, लेकिन मैं इसे खुद को दोहराना प्रतीत नहीं कर सकता। यह मेरा सबसे अच्छा अनुमान था, लेकिन यह अब तक कहीं नहीं चला गया है। यह हमारे स्टेजिंग पर्यावरण पर नहीं होता है जहां लोड उत्पादन उत्पादन की तुलना में महत्वहीन है। यह मुख्य कारण था कि मैंने समेकन मुद्दों को देखना शुरू कर दिया।
दोनों पक्षों पर ईमेल एड्रेस में कुल मूल्य अद्वितीय कुंजी बाधा का उल्लंघन कर सकता है। यदि यह कॉलम निरर्थक है तो आप 'मौजूद नहीं' के रूप में सम्मिलन को फिर से लिख सकते हैं। –
अच्छा बिंदु। मैं कोड में नल के खिलाफ जांच करता हूं, लेकिन मुझे लगता है कि मैं इसे एसक्यूएल में फिर से देख सकता हूं। –