sql server - Check constraint using function -
मेरे पास इन कॉलमों वाले उपयोगकर्ता नामक एक टेबल है: UserID (int) UserName (nvarchar), पासवर्ड (nvarchar), isActive ( बिट - सच / गलत)
मैं क्या करना चाहता हूं डुप्लिकेट उपयोगकर्ता नाम डालने की इजाजत देता है, यदि इस उपयोगकर्ता नाम वाले अन्य सभी उपयोगकर्ता अक्षम हैं
मैंने इस फ़ंक्शन को बनाया है:
वैकल्पिक फ़ंक्शन [dbo]। [IsActiveUsername] (@ उपयोगकर्ता नाम nvarchar (15)) उदाहरण के रूप में वापस आती है (उपयोगकर्ताओं से चुनें जहां सक्रिय है = 1 और उपयोगकर्ता नाम = @ उपयोगकर्ता नाम) रिटर्न 1 रिटर्न 0 END यह फ़ंक्शन सही होगा यदि इस उपयोगकर्ता नाम के साथ सक्रिय उपयोगकर्ता है, अन्यथा गलत है।
उसके बाद, मैंने इस फ़ंक्शन से लौटा मूल्य के आधार पर चेक बाधा बनाई:
वैकल्पिक तालिका [dbo]। [उपयोगकर्ता] नॉकैक के साथ चेक जोड़ें (([dbo ] [IsActiveUsername] ([UserName]) = (0)) अगर इस उपयोगकर्ता नाम के साथ कोई सक्रिय उपयोगकर्ता नहीं है, तो सम्मिलित करें की अनुमति दें ... लेकिन किसी कारण के लिए जब मैं सम्मिलित करने का प्रयास करता हूं एक नया उपयोगकर्ता, जो उपयोगकर्ता नाम के लिए मैं कोशिश करता हूँ, मैं कोई त्रुटि नहीं पाता हूं:
संदेश 547, स्तर 16, राज्य 0, पंक्ति 2 INSERT कथन चेक प्रतिबंध "CK__Users__UserName__4D94879B" के साथ विरोधाभासी है। संघर्ष डेटाबेस "चैट" में हुआ, तालिका "dbo.Users", कॉलम 'उपयोगकर्ता नाम' बयान समाप्त कर दिया गया है। कृपया मदद करें? बहुत धन्यवाद!
समस्या यह है कि INSERT इससे पहले ही आपका < कोड> चेक बाधा दौड़ता है, इसलिए फ़ंक्शन रन होने से पहले तालिका में हमेशा एक उपयोगकर्ता होता है। अपने फ़ंक्शन को इसे बदलें: ALTER FUNCTION [dbo]। [IsActiveUsername] (@ उपयोगकर्ता नाम nvarchar (15)) बिट के रूप में वापस आती है यदि उपयोगकर्ताओं से (का चयन करें COUNT (*) जहां एक्टिव = 1 है और उपयोगकर्ता नाम = @ उपयोगकर्ता नाम) & gt; 1 BEGIN रिटर्न 1 अंत वापसी 0 END
Comments
Post a Comment