如何从可空列中驱动SQL Server中的布尔字段?

时间:2010-05-17 17:30:53

标签: sql-server database database-design

我想在数据库中有两列,一列用于跟踪用户是否提交了某些内容,另一列用于该提交的时间戳。

如何构造表定义以使这两列的状态永远不会出现矛盾?

基本上,我希望布尔字段由SubmittedDate列是否为空来驱动。这是表定义的片段:

CREATE TABLE SomeSchema.SomeTable 
(
    ...
    SubmittedDate                   datetime                NULL,
    Submitted                       bit                     NOT NULL        DEFAULT(0), -- Drive off of SubmittedDate?
    ...

)

实现这一目标的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:6)

只使用一列--DATETIME一列。它具有双重功能 - 列为空意味着它未提交,但如果值存在 - 您也知道何时。

答案 1 :(得分:2)

使用computed column

CREATE TABLE SomeSchema.SomeTable 
(
    ...
    SubmittedDate                   datetime                NULL,
    Submitted      as cast(case when SubmittedDate is null then 0 else 1 end as bit)
)