@ ইয়ারকিউবের উত্তরগুলি আংশিকভাবে মেটাডেটা পরিবর্তন হিসাবে পরিচালনা করে।
সীমাবদ্ধতা যুক্ত করার NOCHECK
অর্থ হ'ল এটি যাচাই করার জন্য কোনও সারি পড়ার দরকার নেই, এবং আপনি যদি এমন অবস্থান থেকে শুরু করছেন যেখানে কলামটিতে NULL
মানগুলি নেই (এবং যদি আপনি জানেন তবে সীমাবদ্ধতাটি পরীক্ষা করা এবং যোগ করার মধ্যে কোনও যোগ করা হবে না), যেহেতু সীমাবদ্ধতা NULL
ভবিষ্যতে INSERT
বা UPDATE
ক্রিয়াকলাপ থেকে মান তৈরি হতে বাধা দেয় , এটি কাজ করবে।
সীমাবদ্ধতা যোগ করার পরেও সাম্প্রতিক লেনদেনগুলিতে প্রভাব পড়তে পারে। ALTER TABLE
একটি অর্জন করতে হবে Sch-M
প্রথম লক। যদিও এটির জন্য এটি অপেক্ষা করছে অন্য বর্ণনীয় টেবিল অ্যাক্সেসগুলি এখানে বর্ণিত হিসাবে অবরুদ্ধ করা হবে ।
একবার Sch-M
লক অর্জিত হয় অপারেশন প্রশংসনীয় দ্রুত কিন্তু হওয়া উচিত।
এর সাথে একটি সমস্যা হ'ল এমনকি যদি আপনি কলামটি জানেন তবে বাস্তবে NULL
সীমাবদ্ধতার কোনও বাধা নেই তবে কোয়েরি অপটিমাইজারের দ্বারা এটি বিশ্বাসযোগ্য নয় যার অর্থ পরিকল্পনাগুলি সর্বোত্তম হতে পারে।
CREATE TABLE T (X INT NULL)
INSERT INTO T
SELECT ROW_NUMBER() OVER (ORDER BY @@SPID)
FROM master..spt_values
ALTER TABLE T WITH NOCHECK
ADD CONSTRAINT X_NOT_NULL
CHECK (X IS NOT NULL) ;
SELECT *
FROM T
WHERE X NOT IN (SELECT X FROM T)
সহজ সঙ্গে এটি তুলনা করুন
ALTER TABLE T ALTER COLUMN X INT NOT NULL
SELECT *
FROM T
WHERE X NOT IN (SELECT X FROM T)
এইভাবে কলাম সংজ্ঞা পরিবর্তন করার সাথে আপনি সম্ভবত যে একটি সমস্যার মুখোমুখি হতে পারেন তা হ'ল এটির শর্তটি পূরণ করে তা যাচাই করার জন্য কেবল সমস্ত সারিটি পড়ার প্রয়োজন নেই, তবে সারিগুলিতে লগইড আপডেটগুলি সম্পাদন করে শেষ করতে পারে ।
একটি সম্ভব হাফ ওয়ে হাউস চেক সীমাবদ্ধতা যুক্ত করা যেতে পারে WITH CHECK
। এটি WITH NOCHECK
সমস্ত সারি পড়ার প্রয়োজনের তুলনায় ধীর হবে তবে এটি কোয়েরি অপটিমাইজারকে উপরের ক্যোয়ারিতে সহজ পরিকল্পনা দেওয়ার অনুমতি দেয় এবং এটি লগড আপডেটের সম্ভাব্য সমস্যাটি এড়ানো উচিত।