উত্তর:
এমএসডিএন ডকুমেন্টেশন পৃষ্ঠায় ALTER TABLEএগুলি ব্যাখ্যা করে:
ALTER TABLE: টেবিলের কাঠামোটি সংশোধন করুন CHECK CONSTRAINT ..: সীমাবদ্ধতা সক্ষম করুনNOCHECK CONSTRAINT ..: সীমাবদ্ধতা অক্ষম করুন সীমাবদ্ধতা WITH CHECK: পাশাপাশি বাধাও পরীক্ষা করে দেখুনWITH NOCHECK: সীমাবদ্ধতা পরীক্ষা করবেন নাতাদের কথায়:
| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT { ALL | constraint_name [ ,...n ] }...
WITH CHECK | WITH NOCHECKসারণীতে থাকা ডেটা সদ্য যুক্ত হওয়া বা পুনরায় সক্ষম হওয়াFOREIGN KEYবাCHECKসীমাবদ্ধতার বিরুদ্ধে বৈধ নয় কিনা তা সুনির্দিষ্ট করে । নির্দিষ্ট না করা থাকলেWITH CHECKনতুন সীমাবদ্ধতারWITH NOCHECKজন্য ধরে নেওয়া হয় এবং পুনরায় সক্ষম সীমাবদ্ধতার জন্য ধরে নেওয়া হয়।আপনি যদি বিদ্যমান ডেটার বিরুদ্ধে নতুন
CHECKবাFOREIGN KEYপ্রতিবন্ধকতা যাচাই করতে না চান তবে ব্যবহার করুনWITH NOCHECK। বিরল ক্ষেত্রে বাদে আমরা এটি করার পরামর্শ দিই না। পরবর্তী সমস্ত আপডেটে নতুন প্রতিবন্ধকতা মূল্যায়ন করা হবে। সীমাবদ্ধতা যুক্তWITH NOCHECKহওয়ার পরে দমন করা যে কোনও প্রতিবন্ধকতা লঙ্ঘনের ফলে ভবিষ্যতের আপডেটগুলি ব্যর্থ হতে পারে যদি তারা সীমাবদ্ধতা মেনে না এমন ডেটা দিয়ে সারিগুলি আপডেট করে।ক্যোয়ারী অপ্টিমাইজার সংজ্ঞাগুলি সীমাবদ্ধতা বিবেচনা করে না
WITH NOCHECK।ALTER TABLEসারণী ব্যবহার করে পুনরায় সক্ষম না করা পর্যন্ত এ জাতীয় বাধা উপেক্ষা করা হয়WITH CHECK CHECK CONSTRAINT ALL।...
{ CHECK | NOCHECK } CONSTRAINT
সীমাবদ্ধতার নাম সক্ষম বা অক্ষম করা হয়েছে তা সুনির্দিষ্ট করে। এই বিকল্পটি কেবলমাত্র সাথে ব্যবহার করা যাবেFOREIGN KEYএবংCHECKসীমাবদ্ধতার। যখনNOCHECKউল্লিখিত থাকলে, বাধ্যতা অক্ষম করা হয়েছে এবং ভবিষ্যতে টিপে বা কলাম আপডেট বাধ্যতা অবস্থার বিরুদ্ধে যাচাই করা হয় না।DEFAULT,PRIMARY KEYএবংUNIQUEসীমাবদ্ধতা অক্ষম করা যায় না।
টেস্ট dbfiddle :
CREATE TABLE a (aid INT PRIMARY KEY);যাওয়া
✓
INSERT INTO a (aid) VALUES (1), (2), (3) ;যাওয়া
3 টি সারি প্রভাবিত
CREATE TABLE b ( aid INT, bid INT PRIMARY KEY, CONSTRAINT [My_FORIEGN_KEY] FOREIGN KEY (aid) REFERENCES a (aid) ) ;যাওয়া
✓
INSERT INTO b (aid, bid) VALUES (1, 11), (1, 12), (2, 21), (3, 31) ;যাওয়া
4 টি সারি প্রভাবিত
INSERT INTO b (aid, bid) VALUES (6, 61), (6, 62) ;যাওয়া
এমএসজি 547 স্তর 16 রাজ্য 0 লাইন 1 INSERT বিবৃতিটি বিদেশী মূল সীমাবদ্ধতা "আমার_ফোরআইইগএন_কেই" এর সাথে বিরোধী। "Fiddle_792fce5de09f42908c3a0f91421f3522", টেবিল "dbo.a", কলাম 'সহায়তা' ডাটাবেসে এই দ্বন্দ্ব দেখা দিয়েছে। এমএসজি 3621 স্তর 0 রাজ্য 0 লাইন 1 বিবৃতিতে বাতিল করা হয়েছে।
SELECT * FROM b ;যাওয়া
সহায়তা | বিদার প্রস্তাব -: | -: 1 | 11 1 | 12 2 | 21 3 | 31
ALTER TABLE b NOCHECK CONSTRAINT [My_FORIEGN_KEY]; --disableযাওয়া
✓
INSERT INTO b (aid, bid) VALUES (4, 41), (4, 42) ;যাওয়া
2 টি সারি প্রভাবিত
SELECT * FROM b ;যাওয়া
সহায়তা | বিদার প্রস্তাব -: | -: 1 | 11 1 | 12 2 | 21 3 | 31 4 | 41 4 | 42
ALTER TABLE b WITH NOCHECK CHECK CONSTRAINT [My_FORIEGN_KEY]; -- enable constraint without checking existing dataযাওয়া
✓
SELECT * FROM b ;যাওয়া
সহায়তা | বিদার প্রস্তাব -: | -: 1 | 11 1 | 12 2 | 21 3 | 31 4 | 41 4 | 42
INSERT INTO b (aid, bid) VALUES (6, 61), (6, 62) ;যাওয়া
এমএসজি 547 স্তর 16 রাজ্য 0 লাইন 1 INSERT বিবৃতিটি বিদেশী মূল সীমাবদ্ধতা "আমার_ফোরআইইগএন_কেই" এর সাথে বিরোধী। "Fiddle_792fce5de09f42908c3a0f91421f3522", টেবিল "dbo.a", কলাম 'সহায়তা' ডাটাবেসে এই দ্বন্দ্ব দেখা দিয়েছে। এমএসজি 3621 স্তর 0 রাজ্য 0 লাইন 1 বিবৃতিতে বাতিল করা হয়েছে।
SELECT * FROM b ;যাওয়া
সহায়তা | বিদার প্রস্তাব -: | -: 1 | 11 1 | 12 2 | 21 3 | 31 4 | 41 4 | 42
ALTER TABLE b WITH CHECK CHECK CONSTRAINT [My_FORIEGN_KEY]; -- check existing data and enable constraintযাওয়া
এমএসজি 547 স্তর 16 রাজ্য 0 লাইন 1 ALTER TABLE বিবৃতিটি বিদেশী মূল সীমাবদ্ধতা "আমার_ফোরআইইগএন_কেই" এর সাথে সাংঘর্ষিক। "Fiddle_792fce5de09f42908c3a0f91421f3522", টেবিল "dbo.a", কলাম 'সহায়তা' ডাটাবেসে এই দ্বন্দ্ব দেখা দিয়েছে।
এখানে নিবন্ধটি পড়ার বিষয়টি বিবেচনা করুন: https://msdn.microsoft.com/en-us/library/ms190273.aspx
এটি আমাদের জানিয়েছে: 'ক্যোয়ারী অপ্টিমাইজারটি কোনও কিছুই ছাড়াই সংজ্ঞায়িত বাধাগুলি বিবেচনা করে না। এই ধরনের প্রতিবন্ধকতাগুলি অবধি অবধি অবধি উপেক্ষা করা হবে যতক্ষণ না তারা চেক চেক কনট্রাস্টেইনট'-এর সাথে ALL টেবিল টেবিল ব্যবহার করে পুনরায় সক্ষম করা হবে '
এছাড়াও, স্ট্যাক ওভারফ্লোতে থ্রেডটি বিবেচনা করুন: /programming/529941/with-check-add-constraint-followed-by-check-constraint-vs-add-constraint
ALTER TABLE b WITH NOCHECK CHECK CONSTRAINT [My_FORIEGN_KEY]; -- enable constraint without checking, এর অর্থ কি এই প্রতিবন্ধকতা বিদ্যমান ডেটাগুলি পরীক্ষা করবে না, কেবলমাত্র নতুন আগত ডেটা?