【发布时间】:2016-02-16 17:47:22
【问题描述】:
当一次插入多个记录时,我们偶尔会在下面的表/列中出现 EMPTY 记录。虽然从技术上讲这是允许的,因为该列可以为空,但默认约束应适用于插入的每一行。
ALTER TABLE [dbo].[JOB] ADD [DATE_CREATED] [nvarchar](35) NULL CONSTRAINT [DF_JOB_DATE_CREATED] DEFAULT (sysdatetime())
我能想到的一个可能原因是“默认值仅在您没有明确插入该列时才适用”。但是我找不到任何代码可以做到这一点,但我仍在努力。还有其他可能的原因吗?
我们使用的是 SQL Server 2012。该列的目的是捕获创建的日期和时间以进行处理。我们不能让该列不可为空,因为这是一个不应该对业务产生影响的报告列。
感谢您的建议。
【问题讨论】:
-
为什么不让它不为空呢?除非某些东西专门插入 NULL,否则它将使用您的默认值,并且 NOT NULL 约束不是问题。
-
是的,它不应该为空。它是元数据列并不重要,您希望它始终被填充。至少,打开它以找到显式插入 null 的代码。
-
您还可以在插入后更新默认为空的可空列。顺便说一句,为什么地球上会有一个日期创建列是
nvarchar(35)- 您的默认值是 datetime2,这应该是您的数据类型 - Bad habits to kick : choosing the wrong data type -
感谢您的评论。 @GarathD 由于兼容性 - 并非所有客户端系统都支持 datetime2。
-
@Dan Field - 我也是这么想的,但我想把它作为最后的选择,因为它需要一些努力来设置类似于 prod 的系统。
标签: sql-server constraints default