我们有一个包含不同数据类型的多个字段的表单,包括字符串,日期时间和数字。
我们的客户希望能够在任何这些字段中编写N / A(不适用),并且可以将其留空。
有人知道我应该如何设计我的Sql Server表,以便它可以支持值,NULL或N / A吗?
我们正在使用Sql Server 2008。
答案 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
优点:
缺点:
答案 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')