2008-12-03 44 views
3

由于奇怪的请求,如果没有值,我不能将null放在数据库中。我在想什么,我可以在商店程序中放置什么,而不是nullTSQL:没有值而不是空

例如:

insert into blah (blah1) values (null) 

有什么像什么或为空 “blah1”,而不是使用null

+0

不要低估这一点;这是RL与真实用户经常遇到的问题。 – dkretz 2008-12-03 21:29:44

+0

什么是表格定义?什么是错误信息? – devio 2008-12-03 21:15:29

回答

5

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

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

编辑:好吧,我读过有关这个工作分配(顺便说一句,通常你应该修改你原来的问题,而不是在回答中发布更多信息)的额外的细节您的回复。

您必须声明所有列为NOT NULL,并在该列数据类型的域中指定一个特殊值来表示“无值”。根据具体情况选择适当的值可能会有所不同,即零可能不代表person_age列中的任何内容,但它可能在列中有意义。

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

+0

我同意。这是奇怪的要求。他们使用Access for DB,所以我想这是告诉你一些事情。我正在工作的那个人告诉我他们在数据库中讨厌null。他们更喜欢它是什么,但不是什么基本上是空的? – Jack 2008-12-03 21:21:25

0

IS NULL是无论你存储?

  • 使用像INT32.MaxValue,空字符串,或“XXXXXXXXXX”哨兵值,并假设它永远不会成为一个合法有效的值值
  • 添加位列“存在”,你与真正的填充,同时您插入

编辑:但是,是的,我会用其他的答案,试图改变的要求达成一致可能比尝试更好问题不大。

1

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

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

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

0

如果您使用的是VARCHAR或等效场,然后用空字符串。

如果您使用的是数字字段,例如int,那么您将不得不强制用户输入数据,否则会出现一个表示NULL的值。

我不羡慕你的情况。

0

NULL作为分配的值(例如插入到列中)和NULL作为SQL工件(对于OUTER JOIN的缺失记录中的字段有区别),这可能是这些用户的外部概念。很多人使用Access或任何数据库,只是为了维护单表列表。)如果幼稚的用户更喜欢使用替代方法来分配任务,我不会感到惊讶;虽然令人反感,但它应该可以正常工作。只要让他们使用任何他们想要的。

0

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

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

当NULL被评估为相等时,MSSQL尤其会以意想不到的方式运行。当我们搜索最新的记录时,PaymentDue字段中的NULL值是否等于零?如果我们在一张桌子上有名字而有人没有中间名,该怎么办?可以想象,可以存储空字符串或NULL,但是我们如何获得一个没有中间名的人的全面列表?

一般来说,我宁愿避免NULL值。如果使用数字(包括零)或字符串(包括前面提到的空字符串)无法表示要存储的内容,则应该仔细观察要存储的内容。也许你正试图在一个领域传达不止一个数据。