আমি একটি গণনা কলামে অদ্ভুত মান সম্পর্কে এই প্রশ্ন অনুসরণ করছি PERSISTED
। উত্তরটি এই আচরণটি কীভাবে হয়েছিল সে সম্পর্কে কয়েকটি অনুমান করে।
আমি নিম্নলিখিতগুলি জিজ্ঞাসা করছি: এটি কি কোনও সম্পূর্ণ বাগ নয়? করছেন PERSISTED
কলাম কি কখনো এইরকম আচরণ করতে দেয়া?
DECLARE @test TABLE (
Col1 INT,
Contains2 AS CASE WHEN 2 IN (Col1) THEN 1 ELSE 0 END PERSISTED) --depends on Col1
INSERT INTO @test (Col1) VALUES
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5))
SELECT * FROM @test --shows impossible data
UPDATE @test SET Col1 = Col1*1 --"fix" the data by rewriting it
SELECT * FROM @test --observe fixed data
/*
Col1 Contains2
2 0
2 0
0 1
4 0
3 0
Col1 Contains2
2 1
2 1
0 0
4 0
3 0
*/
দ্রষ্টব্য, যে ডেটা "অসম্ভব" বলে মনে হচ্ছে কারণ গণিত কলামের মানগুলি এর সংজ্ঞা সাথে মিলছে না।
এটি সুপরিচিত যে প্রশ্নগুলিতে অ-নিরস্তামূলক কাজগুলি অদ্ভুত আচরণ করতে পারে তবে এখানে মনে হয় এটি স্থির গণিত কলামগুলির চুক্তি লঙ্ঘন করে এবং তাই এটি অবৈধ হওয়া উচিত।
এলোমেলো সংখ্যা সন্নিবেশ করানো একটি সঙ্কোচিত দৃশ্য হতে পারে তবে যদি আমরা NEWID()
মানগুলি সন্নিবেশ করতাম বা SYSUTCDATETIME()
? আমি মনে করি এটি একটি প্রাসঙ্গিক সমস্যা যা সম্ভবত ব্যবহারিকভাবে প্রকাশিত হতে পারে।