ان محدد القيمة الخالية NOT NULL Constraint سوف يضمن ادخال قيم في الحقل ولا يسمح بأستخدام القيمة الفارغة (NULL Value) في الحقل.
في حالة عدم استخدام هذا المحدد فأن النظام سوف يقبل القيمة الخالية للحقول في المثال التالي عندما كونا جدول الزبائن لم نستخدم NOT NULL Constraint لذلك يمكن ان نستخدم القيمة الخالية مع كل الحقول وهذا هو التصرف الافتراضي SQL Server اي اذا لم نضيف العبارة NOT NULL عند تعريف الحقل فأن النظام يتوقع اننا نريد ان نستخدم القيم الخالية مع الحقول.
CREATE TABLE CUSTOMER ( CUTSOMER_ID VARCHAR (10), CUTSOMER_NAME VARCHAR (200), CUTSOMER_AGE INT, CUTSOMER_ADDRESS VARCHAR (3000) );
في المثال التالي سوف نكون جدول الزبائن مع استخدام محدد القيمة الخالية مع حقلي المعرف واسم الزبون حيث وضعنا عبارة NOT NULL مباشرة بعد نوع البيانات (مع ترك one space) وهذه هي طريقة تعريف محدد NOT NULL :
CREATE TABLE CUSTOMER ( CUTSOMER_ID VARCHAR (10) NOT NULL, CUTSOMER_NAME VARCHAR (200) NOT NULL, CUTSOMER_AGE INT, CUTSOMER_ADDRESS VARCHAR (3000) );
الان اذا حاولنا ادخال البيانات بأستخدام عبارة INSERT INTO التالية وحاولنا ادراج قيمة خالية في حقل الاسم ( وذللك لاننا لم نذكر حقل الاسم CUSTOMER_NAME في عبارة INSERT ,وبتالي فأن نظام SQL Server سوف يحاول ان يدرج قيمة خالية في هذا الحقل)
INSERT INTO [CUSTOMERS] ([CUTSOMER_ID] ,[CUTSOMER_AGE] ,[CUTSOMER_ADDRESS]) VALUES ('ID0001',23,'العراق بغداد')
سوف يعيد نظام SQL Server رسالة الخطاء التالية وهي تخبرنا بشكل واضح اننا حاولنا استخدام قيمة خالية في حقل الاسم وأن النظام لاسمح بذلك وبسبب هذا الانتهاك لقاعدة القيمة الخالية فان عملية INSERT لم تحدث.
Msg 515, Level 16, State 2, Line 4
Cannot insert the value NULL into column 'CUTSOMER_NAME', table 'LEARNSQL.dbo.CUSTOMERS'; column does not allow nulls. INSERT fails.
The statement has been terminated.
لكي نتفادى هذا الخطاء يجب ان نذكر حقل الاسم CUSTOMER_NAME في عبارة INSERT وان نعطي قيمة لهذا الحقل كما في المثال التالي
INSERT INTO [CUSTOMERS] ([CUTSOMER_ID] ,[CUTSOMER_NAME],[CUTSOMER_AGE] ,[CUTSOMER_ADDRESS]) VALUES ('ID0001','Ahmed Ali',23,'العراق بغداد')
اضافة محدد لقيمة الخالية NOT NULL Constraint الى جدول موجود
شرحنا سابقا كيف نظيف محدد القيمة الخالية اثناء عملية تكوين الجدول ولكن ماذا لوكان الجدول موجود ويحتوي على بيانات ولكن الان نريد اننضيف هذا المحدد ؟ هنا سوف نستخدم عبارة ALTER TABLE ALTER COLUMN في المثال التالي سوف نضيف محدد القيمة الخالية الى حقل العمر في جدول الزبائن و الطريقة بسطية هو بعد عبارة ALTER COLUMN سوف نذكر اسم الحقل ونوع بيانات الحقل ثم نترك مسافة وبعدها نضيف العبارة NOT N وثم ننفذ العبارة وسوف يقوم النظام بأضافة هذا المحدد الى الحقل.
ALTER TABLE [CUSTOMERS] ALTER COLUMN [CUTSOMER_AGE] INT NOT NULL
في بعض الاحيان لا تجري الامور بسهولة , مثلا ماذا سوف يحدث اذا كان الحقل الذي نريد ان نضيف اليه محدد القيمة الخالية اصلا يحتوي على قيم خالية , مثلا حقل العنوان في جدول الزبائن كان يقبل القيم الخالية وقد استخدمنا الجدول وادخلنا الالاف من السجلات في هذا الجدول وقسم من السجلات فيها حقل العنوان يحتوي على قيمة NULL
ALTER TABLE [CUSTOMERS] ALTER COLUMN [CUTSOMER_ADDRESS] [varchar](1000) NOT NULL
ففي هذه الحالة عندما ننفذ الايعاز السابق سوف نحصل على رسالة خطاء التالية وهي تشير الى موجود قيم NULL في حقل العنوان وبتالي فأن SQL Server لم يستطيع اضافة المحدد .
Msg 515, Level 16, State 2, Line 26 Cannot insert the value NULL into column 'CUTSOMER_ADDRESS', table 'LEARNSQL.dbo.CUSTOMERS'; column does not allow nulls. UPDATE fails. The statement has been terminated.
لكي نحل المشكلةالسابقة علينا ان نبحث على الاسطر التي سببت هذا الخطاء بسبب امتلاكها لقيمة NULL في حقل العنوان ونقوم بأعطاء قيمة عبارة نصية فارغة ('') كقيمة لحقل العنوان الايعاز التالي يعيد الاسطر التي تمتلك قيمة NULL في حقل العنوان. في الايعاز التالي استخدمنا الدالة ( IS NULL) ومعنى الايعاز التالي هو اننا اخبرنا النظام ان يعيد لنا كل الاسطر التي تمتلك قيمة خالية NULL في حقل العنوان.
SELECT * FROM [CUSTOMERS] WHERE [CUTSOMER_ADDRESS] IS NULL
بعد ان تعرفنا الى عدد الاسطر التي تحتاج الى تحديث (يرجى اخذ الاحتياطات الازمة اما نسخ الجدول احتياطيا او الاحتفاظ بملفات النسخ الاحتياطي لقاعدة البيانات) سوف نقوم بنتفيذ عملية التحديث باستخدام عبارة UPDATE التالية والتي معناها اخبرنا النظام ان يقوم بتغيير قيمة حقل العنوان من NULL Value الى عبارة نصية فارغة ('') او مايعرف ب empty string وهي تختلف عن NULL Value حيث ان النظام يعتبر عبارة نصية فارغة ('') هي قيمة حقيقية وليست قيمة خالية وهذا مهم جدا.
UPDATE [CUSTOMERS] SET CUTSOMER_ADDRESS='' WHERE [CUTSOMER_ADDRESS] IS NULL
بعد ان نفذنا الايعاز السابق نستطيع ان ننفذ الا يعاز التالي بنجاح وسوف يقوم SQL Server بأضافة محدد القيمة الخالية الى حقل العنوان وبتالي اي عملية INSERT او UPDATE تحصل بعد اضافة المحدد سوف لن تتم ما لم نعطي قيم لحقل العنوان.
ALTER TABLE [CUSTOMERS] ALTER COLUMN [CUTSOMER_ADDRESS] [varchar](1000) NOT NULL
ليست هناك تعليقات:
إرسال تعليق