तालिका बदलें और एक त्रुटि में अद्वितीय कुंजी परिणाम जोड़ें

I have a table called Animal. AnimalId is the primary key & I wanted to set the column AnimalType_id as UNIQUE (I have an AnimalType table and need to set a foreign key here)

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

दोनों टेबलों में पहले से ही डेटा है, क्योंकि मैं टेबल को नहीं छोड़ सकता।

हालांकि यह एक त्रुटि में परिणाम:

संदेश 102, स्तर 15, राज्य 1, रेखा 2
  '।' के पास गलत वाक्यविन्यास।

2
जोड़ा संपादित
विचारों: 1
@ कॉनराड Frix हाँ त्रुटि क्या है?
जोड़ा लेखक TechGuy, स्रोत
संदेश 102, स्तर 15, राज्य 1, रेखा 2 '।' के पास गलत वाक्यविन्यास।
जोड़ा लेखक TechGuy, स्रोत
और त्रुटि है ...
जोड़ा लेखक Conrad Frix, स्रोत
@chathuraRanasinghe जब आप अद्वितीय बाधा जोड़ने की कोशिश करते हैं तो त्रुटि संदेश क्या होता है?
जोड़ा लेखक Daniel Renshaw, स्रोत

5 उत्तर

टेबल बाधा जोड़ने के लिए दस्तावेज़ देखें।

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)

ऐसा लगता है जैसे AnimalType_id एक विदेशी कुंजी है, इसलिए मैं सिर्फ यह जांचना चाहता था कि आप इस कॉलम को अद्वितीय बनाकर, आप एक-दूसरे के रिश्ते को बना रहे हैं - आप केवल प्रत्येक प्रकार का एक जानवर प्राप्त कर पाएंगे।

चूंकि आपको अद्वितीय बाधा जोड़ने में त्रुटि मिल रही है, इसलिए मैं सुझाव दे रहा हूं कि आप वास्तव में एक अद्वितीय बाधा के बजाय एक विदेशी कुंजी चाहते हैं:

ALTER TABLE Animal
    ADD CONSTRAINT FK_Animal_AnimalType
    FOREIGN KEY
    (
        AnimalType_id
    )
    REFERENCES AnimalType
    (
        id
    )

मुझे AnimalType तालिका नाम के नाम पर अनुमान लगाना पड़ा है और यह प्राथमिक कुंजी कॉलम नाम है - अगर वे गलत हैं तो कृपया इन्हें बदलें।

12
जोड़ा
और इससे भी बेहतर: नाम आपकी अनूठी बाधा! <�कोड> वैकल्पिक तालिका पशु जोड़ें CONQAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)
जोड़ा लेखक marc_s, स्रोत
@ चतुराराणसिंघे: जाहिर है, आपके डेटा में पहले से ही डुप्लीकेट हैं - आप एक कॉलम पर एक अद्वितीय बाधा नहीं बना सकते जिसमें डुप्लिकेट मान हैं। उन डुप्लिकेट को ठीक करें - और फिर आप अद्वितीय बाधा बना सकते हैं
जोड़ा लेखक marc_s, स्रोत
तो मुझे यह त्रुटि मिली ..
जोड़ा लेखक TechGuy, स्रोत
संदेश 156, स्तर 15, राज्य 1, रेखा 3 कीवर्ड 'अद्वितीय' के पास गलत वाक्यविन्यास।
जोड़ा लेखक TechGuy, स्रोत
पहले से ही मेरे पास इस तालिका में प्राथमिकता है .. मुझे यह त्रुटि मिली है> संदेश 1505, स्तर 16, राज्य 1, रेखा 1 बनाएं अद्वितीय इंडेक्स स्टेटमेंट समाप्त हो गया क्योंकि ऑब्जेक्ट नाम 'dbo.Animal' और अनुक्रमणिका के लिए डुप्लिकेट कुंजी मिली नाम 'UQ_Animal_AnimalTypeId'। डुप्लिकेट कुंजी मान (1) है।
जोड़ा लेखक TechGuy, स्रोत
परिदृश्य देखें >> लिंक
जोड़ा लेखक TechGuy, स्रोत
@chathuraRanasinghe क्षमा करें, CONSTRAINT कीवर्ड का उपयोग होने पर एक बाधा नाम आवश्यक है। उत्तर संपादित; और @marc_s के लिए धन्यवाद।
जोड़ा लेखक Daniel Renshaw, स्रोत
@chathuraRanasinghe क्या आप वाकई चाहते हैं कि कॉलम अद्वितीय हो? जैसा कि मैंने अपने जवाब में उल्लेख किया है, यह रिश्ते को 1-1 बना देगा और आपकी त्रुटि से पता चलता है कि आप जो चाहते हैं वह नहीं है।
जोड़ा लेखक Daniel Renshaw, स्रोत

यदि आप अपने द्वारा बनाए गए सभी ऑब्जेक्ट्स (यहां तक ​​कि बाधाओं) को नाम देने की आदत में आते हैं, तो आपको बाद में आसान समय होगा जब आपको बाधा को अक्षम करने, ड्रॉप करने या बदलने की आवश्यकता होती है:

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

एक अद्वितीय सूचकांक बनाने से अधिक लचीला बाधा-जैसे प्रभाव प्राप्त करना भी संभव है।

2
जोड़ा
पहले से ही मेरे पास इस तालिका में प्राथमिकता है .. मुझे यह त्रुटि मिली है> संदेश 1505, स्तर 16, राज्य 1, रेखा 1 बनाएं अद्वितीय इंडेक्स स्टेटमेंट समाप्त हो गया क्योंकि ऑब्जेक्ट नाम 'dbo.Animal' और अनुक्रमणिका के लिए डुप्लिकेट कुंजी मिली नाम 'UQ_Animal_AnimalTypeId'। डुप्लिकेट कुंजी मान (1) है। -
जोड़ा लेखक TechGuy, स्रोत
इसे अब पा लिया है। <�कोड> अद्वितीय और विदेशी कुंजी दो अलग-अलग चीजें हैं। <�कोड> वैकल्पिक तालिका पशु जोड़ें कन्स्ट्रेंट FK_Animal_Type विदेशी कुंजी (AnimalType_id) संदर्भ Animal_Type (AnimalType_id)
जोड़ा लेखक Jirka Hanika, स्रोत

इसे इस्तेमाल करे

वैकल्पिक तालिका तालिका_नाम CONSTRAINT UNIQUE जोड़ें (column_name)

1
जोड़ा

मुझे लगता है कि आप ऐसा करने की कोशिश कर रहे हैं:

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;
0
जोड़ा
वास्तव में नहीं। पहले से ही मेरे पास AnimalType_id नामक एक coloumn है .. मैं उस आईडी को एक अद्वितीय कुंजी के रूप में सेट करना चाहता था
जोड़ा लेखक TechGuy, स्रोत

ऐसा लगता है कि कॉलम में डेटा अद्वितीय नहीं है। जब आप किसी कॉलम पर अनन्य बाधा उत्पन्न करते हैं, तो आपके पास कोई डुप्लिकेट प्रविष्टियां नहीं हो सकती हैं (आपके पास सबसे अधिक शून्य हो सकती है)

0
जोड़ा
असल में यह 1 डीबी से दूसरे डीबी तक डाटा ट्रांसफर है और अधिक coloumns.thats क्यों जोड़ रहा है
जोड़ा लेखक TechGuy, स्रोत