سوال من در مورد عمل کرد و بنیان اساس MS SQL هست
SQL Server و زبان SQL از یک منطق سه مقداری (Three Value Logic = 3VL) استفاده میکند. در منطق دو ارشی مقدار True است یا False ولی در SQL این منطق دارای سه مقدار True و False و Unknown است. که در جدول صحت (Truth table) یک سطر و ستون دیگه به جدول برای مقدار ناشناخته اضافه شده است. بر فرض اگر مقدار null را بخواهیم با مقدار دیگری مقایسه کنیم نتیجه ناشناخته خواهد بود که در اینجا ناشناخته به False تعبیر میشه.
یک فیلد دارم از نوع Boolean یا bit
یک برنامه می خوام بنویسم که اگر مقدار فیلد null بود "تکس باکس" را قرمز کنه
اگر false بود آبی کنه و اگر True بود سبز کنه آیا این روش درسته؟
از نظر عملی اینکار امکان پذیره ولی استفاده از NULL به این شکل کار صحیحی نیست. نوع داده را TIYINT بگیرید و سعی کنید از یک روش استاندارد (در مورد ISO در اینترنت جستجو کنید) برای ذخیره کردن رنگ ها استفاده کنید. مثلا برای ذخیره کردن جنیست افراد یک روش استاندارد (?????-ISO) وجود داره که شمارش یادم نیست که مثلا 0 برابر با مرد، 1 زن، 2 ناشناخته و ....
از ترکیب Computed Column و CASE داریم:
DECLARE @t TABLE( i BIT NULL, j AS CASE WHEN i IS NULL THEN 'red'
WHEN i=0 THEN 'bule'
WHEN i=1 THEN 'green' END);
INSERT @t VALUES (NULL); TINyint
INSERT @t VALUES (1);
INSERT @t VALUES (0);
SELECT * FROM @t
/*
i j
----- -----
NULL red
1 green
0 bule
*/