在Sql Server中存储N / A.

时间:2010-02-19 18:38:58

标签: sql-server

我们有一个包含不同数据类型的多个字段的表单,包括字符串,日期时间和数字。

我们的客户希望能够在任何这些字段中编写N / A(不适用),并且可以将其留空。

有人知道我应该如何设计我的Sql Server表,以便它可以支持值,NULL或N / A吗?

我们正在使用Sql Server 2008。

6 个答案:

答案 0 :(得分:4)

如果N / A和空白是您需要支持的真正不同的值,我会说将字段创建为可空字段(在这种情况下,NULL将表示空值),然后包含第二个位字段[FieldName] NotAvailable或[FieldName]已指定。

当然,您将使用两个单独的字段来表示单个逻辑概念,尝试将其全部强制转换为一个字段会导致两个概念存储在同一个字段中(该字段按单向解释,除非有一些神奇的价值,然后它意味着别的东西)。这样,对于单独的字段,字段的预期行为就更清楚了。

答案 1 :(得分:1)

如果他们只想要一个州,你可以像其他人所说的那样简单地翻译null:

SELECT COALESCE(thecolumn1,'N/A') AS mycolumnalias

如果发现它们确实希望在列上具有“三态”,则可以创建伴随VARCHAR列。

SELECT COALESCE(thecolumn1, companioncolumn1,'N/A') AS mycolumnalias

优点:

  • 如果他们再次改变主意,您可以更改companioncolumn1值。
  • 如果在COALESCE中同时使用这两列,它会在非空时自动获取第一列,如果设置则获取伴随值,第一列为空,并且回退到指定的'N / A'选择。
  • 您可以在数据库层进行管理
  • 您维护原始列的数据类型

缺点:

  • 在数据库中有一个额外的列要管理。
  • 稍微复杂的SELECT语句
  • 您必须在数据库层进行管理
  • 类型转换和验证会更复杂,但您已经遇到了这个问题

答案 2 :(得分:0)

我能想到的唯一类型是varchar。

您必须拥有基于字段解释数据的代码(即如果字段名称为InvoiceDate,则为日期)。

编辑:阅读最近的评论后,您可以为每个字段添加“IsNA”(位)字段。因此,如果用户为InvoiceDate选择“NA”,则将“IsInvoiceDateNA”设置为true&假(否则)。

屏幕视图将根据每个输入字段的but字段进行驱动。

答案 3 :(得分:0)

我会将答案存储在一个varchar(或nvarchar)字段中。

应用程序代码可以验证和解释输入为数字或日期等。有关该字段的元信息将告诉您如何解释它。

在这种情况下,您可以拥有NULL,空白或N / A,或实际值......

答案 4 :(得分:0)

正如其他人所提到的,varchar或nvarchar是您最好的解决方案。

答案 5 :(得分:0)

无论列的数据类型如何,都可以应用默认的null。返回结果的地方你可以使用

Select Isnull(colX,'N/A')

Select Coalesce(collX,'N/A')