3

null由于一个奇怪的请求,如果没有价值,我无法放入数据库。我想知道我可以在存储过程中放置​​什么而不是null.

例如:

insert into blah (blah1) values (null) 

“blah1”是否有类似空或空的东西,而不是使用null

4

6 回答 6

5

我会拒绝这个奇怪的要求。这正是NULLSQL 中的用途,用于表示列中缺失或不适用的值。

请求者是否对 SQL 逻辑感到悲伤NULL

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

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

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

于 2008-12-03T21:15:14.487 回答
1

取决于列的数据类型。对于数字(整数等),它可以是零 (0),但如果是 varchar,那么它可以是一个空字符串 ("")。

我同意其他回应,即 NULL 最适合于此,因为它超越了所有表示没有值的数据类型。因此,零和空字符串可能作为一种解决方法/破解,但它们基本上仍然是实际值本身,可能具有除“不是值”之外的业务领域含义。

(如果只有 SQL 语言支持“不适用”(N/A)值类型,它可以作为 NULL 的替代品......)

于 2008-12-03T21:16:00.633 回答
0

对于您存储的任何内容,null 是否都是有效值?

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

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

于 2008-12-03T21:15:50.367 回答
0

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

如果您使用的是诸如 int 之类的数字字段,那么您将不得不强制用户输入数据,否则请提供一个表示 NULL 的值。

我不羡慕你的处境。

于 2008-12-03T21:16:33.080 回答
0

NULL 作为分配值(例如插入到列中)和 NULL 作为 SQL 工件(对于 OUTER JOIN 的缺失记录中的字段)之间存在差异。这对这些用户来说可能是一个陌生的概念。很多人使用Access 或任何数据库,只是为了维护单表列表。)如果天真的用户更愿意使用替代方法来分配,我不会感到惊讶。虽然令人反感,但它应该可以正常工作。只要让他们使用他们想要的任何东西。

于 2008-12-03T21:28:45.333 回答
0

不使用 NULL 值的要求有一定的有效性。当 NULL 值位于将包含在 JOIN 或 WHERE 子句中的字段或将被聚合的字段中时,它们可能会引起很多麻烦。

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

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

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

于 2008-12-03T21:58:34.087 回答