日期:2014-05-19  浏览次数:20789 次

新手问:为何sqlserver中定义一个整型变量不赋值,其值是null,可是诸如c++中,整型不赋值,就是0呀?
我不解的是,在c++中,如果定义一个整型变量,如果不给具体的值,其默认值就是0,这样好理解,可是sqlserver中,如果一个整型变量不赋值的话,其值是null,这一点不太好理解。
c++中也有null值,但是不这样处理。

当然,您可能会说,这是规定,我想问问是为什么这样设计。
我想是有一定的道理吧。

------解决方案--------------------
举个简单的例子,比如一个学生成绩表中的成绩如果是NULL,代表它缺考,是0就可能是参加了考试但只考了0分
我想是不是c++只单纯从语言的角度来考虑设计,而sql则跟实际业务有一定的联系,呵呵
------解决方案--------------------
纯语言的角度.整型默认就是0,可是从业务逻辑来讲,null更严格些.
数据库毕竟不是编程语言.
------解决方案--------------------
用一个新的名词:可空的类型

因为对于数据库的值来说,这个值可以不存在,不存在就是 <NULL> 了

当然C++里可能没有这样的可空的类型,
但是有的语言就是支持的,比如在C#2.0中就有这样的类型,比如有如下的定义:

int? abc = null;
int? abc = 123;

整数后面加一个 "? "号表示这个类型是可以为空的,它的值只能是一个整数,或者一个null值.这样就和数据库的值的定义相符了.

你可以不使用这种可为空的类型,也不必使用C#2.0,但是这是一个概念吧.一个值可以不设置,也可以被设置为一个具体的类型是符合实际的.


如果C++不支持,只能说它不支持而已.