আপনি যখন কোনও কলামটি নট নূলে পরিবর্তন করবেন, তখন এসকিউএল সার্ভারকে প্রতিটি একক পৃষ্ঠাতে স্পর্শ করতে হবে , এমনকি সেখানে কোনও মান নেই। আপনার ফিল ফ্যাক্টরের উপর নির্ভর করে এটি আসলে অনেক পৃষ্ঠা বিভক্ত হতে পারে। অবশ্যই স্পর্শ হওয়া প্রতিটি পৃষ্ঠা অবশ্যই লগ করতে হবে এবং আমি বিভক্ত হওয়ার কারণে সন্দেহ করি যে দুটি পৃষ্ঠায় অনেক পৃষ্ঠার জন্য লগইন করতে হতে পারে। যেহেতু এটি সবই একক পাসে সম্পন্ন হয়েছে, যদিও লগের সমস্ত পরিবর্তনগুলির জন্য অ্যাকাউন্ট তৈরি করতে হবে যাতে আপনি যদি বাতিলকে চাপান তবে এটি জানে যে কী পূর্বাবস্থায় ফেলা উচিত।
একটি উদাহরণ. সাধারণ টেবিল:
DROP TABLE dbo.floob;
GO
CREATE TABLE dbo.floob
(
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
bar INT NULL
);
INSERT dbo.floob(bar) SELECT NULL UNION ALL SELECT 4 UNION ALL SELECT NULL;
ALTER TABLE dbo.floob ADD CONSTRAINT df DEFAULT(0) FOR bar
এখন, পৃষ্ঠাগুলি বিশদটি দেখুন। প্রথমে আমাদের কী পৃষ্ঠা এবং ডিবি_আইডি নিয়ে কাজ করছি তা খুঁজে বের করতে হবে। আমার ক্ষেত্রে আমি একটি ডেটাবেস তৈরি করেছি foo
এবং ডিবি_আইডি হ'ল 5।
DBCC TRACEON(3604, -1);
DBCC IND('foo', 'dbo.floob', 1);
SELECT DB_ID();
আউটপুট ইঙ্গিত দেয় যে আমি 159 পৃষ্ঠাতে আগ্রহী (এর DBCC IND
সাথে আউটপুটে একমাত্র সারি PageType = 1
)।
এখন, আসুন আমরা ওপির দৃশ্যের মাধ্যমে পদক্ষেপ নেওয়ার সাথে সাথে কয়েকটি নির্বাচিত পৃষ্ঠাগুলির বিবরণটি দেখি।
DBCC PAGE(5, 1, 159, 3);
UPDATE dbo.floob SET bar = 0 WHERE bar IS NULL;
DBCC PAGE(5, 1, 159, 3);
ALTER TABLE dbo.floob ALTER COLUMN bar INT NOT NULL;
DBCC PAGE(5, 1, 159, 3);
এখন, আমার কাছে এর সমস্ত উত্তর নেই, কারণ আমি কোনও গভীর ইন্টার্নাল লোক নই। তবে এটি পরিষ্কার যে - হালনাগাদ অপারেশন এবং নূন্যতম সীমাবদ্ধতার সংযোজন উভয়ই অনিচ্ছাকৃতভাবে পৃষ্ঠাতে লিখুন - পরেরটি সম্পূর্ণ ভিন্ন উপায়ে এটি করে। এটি কেবলমাত্র বিটগুলি দিয়ে মুরগির পরিবর্তে রেকর্ডের কাঠামোটিকে পরিবর্তিত বলে মনে হচ্ছে, একটি অ-শর্তযুক্ত কলামের জন্য অযোগ্য কলামটি অদলবদল করে। কেন এটি করতে হবে, আমি বেশ নিশ্চিত নই - স্টোরেজ ইঞ্জিন দলের জন্য একটি ভাল প্রশ্ন , আমার ধারণা। আমি বিশ্বাস করি যে এসকিউএল সার্ভার ২০১২ এফএনডাব্লুআইডাব্লু - এর মধ্যে আরও কিছু পরিস্থিতি আরও ভালভাবে পরিচালনা করে তবে আমার এখনও কোনও পরিসমাপ্তি পরীক্ষা করতে হয়নি।
NOT NULL
করে। ডকুমেন্টেশনে "একটি অনলাইন অপারেশন হিসাবে নট কুল কলামগুলি যোগ করা" দেখুন ।