NULL【错失机遇:MSSQL 拒绝 NULL 的存储】(mssql 不允许保存)
现代社会中,大部分关系型数据库都可以存储 NULL,为了节省存储空间,NULL可以表示未知、不存在或其他原因导致值得无法填充或者不存在。但是,令人恐慌的是,MSSQL数据库会拒绝存储NULL。
虽然这一拒绝NULL的传统存在了很长时间,但仍然存在误解。MSSQL拒绝NULL的实际原因是因为它会把包含NULL的所有记录当做空记录,形成混乱的记录结构,所以它拒绝保存NULL值。
另一方面,空值可以被视为无法使用的垃圾,用来表达值的缺失或者空白,而另一种许多数据库都支持的选项是用空字符串“”。有时,空字符串也被视为NULL,但它非常不同,因为它有值,而且有一些关键的操作(如比较和关联)可以基于它来实现,而NULL则无法实现。
建议使用其他替代品来实现NULL功能,比如默认值、空字符串或者其他类型。例如,在数字字段中可以使用0作为默认值,而在字符串字段中可以使用空字符串“”或者“N/A”作为默认值。示例如下:
(1)在存储字段中使用默认值
CREATE TABLE [MyTable] ([ID] int NOT NULL DEFAULT 0, [Name] varchar(100) NOT NULL DEFAULT “N/A”)
(2)在更新字段中使用零值
UPDATE MyTable SET ID = 0 WHERE ID IS NULL
(3)在更新字段中使用空字符串
UPDATE MyTable SET Name = ” WHERE Name IS NULL
总而言之,尽管MSSQL拒绝NULL的实际原因是为了避免结果混乱,但它也可以被替代,以达到良好的结果。