TSQL:没有值而不是Null

时间:2008-12-03 21:11:41

标签: sql sql-server tsql null

由于一个奇怪的请求,如果没有值,我不能将null放在数据库中。我想知道我可以在商店程序中添加什么而不是null

例如:

insert into blah (blah1) values (null) 

对于使用null的“blah1”而言,是否有类似于空格或空的内容?

6 个答案:

答案 0 :(得分:5)

我会推迟这个奇怪的请求。这正是SQL中NULL的用途,表示列中缺少或不适用的值。

请求者是否因使用NULL

而对SQL逻辑感到悲伤

编辑:好的,我已经阅读了您的回复以及有关此职位分配的额外详细信息(顺便说一句,通常您应该编辑原始问题,而不是在答案中发布更多信息)。

您必须将所有列声明为NOT NULL,并在该列的数据类型的域中指定一个特殊值,以表示“无值”。选择的适当值可能因具体情况而异,即零可能在person_age列中不表示任何内容,但它可能在items_in_stock列中具有重要性。

您应记录每列的无值值。但我想他们也不相信文档。 : - (

答案 1 :(得分:1)

取决于列的数据类型。对于数字(整数等),它可以是零(0)但是如果是varchar则它可以是空字符串(“”)。

我同意NULL最适合的其他响应,因为它超越了表示缺少值的所有数据类型。因此,零和空字符串可以作为变通方法/黑客,但它们本身仍然是实际值本身,可能具有除“非值”之外的业务域含义。

(如果只支持SQL语言a "Not Applicable" (N/A) value type that would serve as an alternative to NULL ...)

答案 2 :(得分:0)

对于您要存储的内容,null是否为有效值?

  • 使用诸如INT32.MaxValue,空字符串或“XXXXXXXXXX”之类的哨兵值,并假设它永远不会是合法值
  • 在插入的同时添加一个填充为true的位列'Exists'。

编辑:但是,我同意其他答案,试图改变要求可能比试图解决问题更好。

答案 3 :(得分:0)

如果您正在使用varchar或等效字段,请使用空字符串。

如果您正在使用诸如int之类的数字字段,则必须强制用户输入数据,否则会出现一个表示NULL的值。

我不羡慕你的情况。

答案 4 :(得分:0)

作为赋值(例如插入列)的NULL之间存在差异,而作为SQL工件的NULL(作为OUTER JOIN的缺失记录中的字段)之间存在差异。这可能是这些用户的外国概念。人们使用Access或任何数据库,只是为了维护单表列表。)如果天真的用户更喜欢使用替代方案,我不会感到惊讶;虽然令人反感,它应该工作正常。让他们使用他们想要的任何东西。

答案 5 :(得分:0)

不使用NULL值的要求有一定的效力。当NULL值位于将包含在JOIN或WHERE子句中的字段中或者将聚合的字段中时,可能会导致很多麻烦。

某些SQL实现(例如MSSQL)不允许将NULLable字段包含在索引中。

当评估NULL是否相等时,MSSQL会以意想不到的方式运行。当我们搜索最新的记录时,PaymentDue字段中的NULL值是否与零相同?如果我们在表中有名字而某人没有中间名怎么办?可以想象,可以存储空字符串或NULL,但是我们如何获得没有中间名的人员的综合列表?

一般来说,我更喜欢避免使用NULL值。如果您无法使用数字(包括零)或字符串(包括前面提到的空字符串)来表示您要存储的内容,那么您应该仔细查看您要存储的内容。也许您正试图在一个字段中传达多个数据。