默认日期约束具有空记录

时间:2016-02-16 17:47:23

标签: sql-server constraints default

当一次性插入多个记录时,我们在下面的表/列中偶尔会出现EMPTY记录。虽然从技术上讲这是允许的,因为列可以为空,但默认约束应该适用于插入的每一行。

ALTER TABLE [dbo].[JOB] ADD [DATE_CREATED] [nvarchar](35) NULL CONSTRAINT [DF_JOB_DATE_CREATED]  DEFAULT (sysdatetime())

我能想到的一个可能原因是“默认只会在您未明确插入该列时才适用”。但我无法找到任何代码,但我仍然在努力。还有其他可能的原因?

我们在SQL Server 2012上。该列的目的是捕获创建的处理日期和时间。我们不能将此列设为不可为空,因为这是一个不应对业务产生影响的报告列。

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

使列NOT NULL。至少,这样做可以捕获哪些应用程序/查询显式插入NULL - 这实际上是不允许的。

如果没有,请创建一个触发器:

CREATE TRIGGER trg_JOB_CreateDate
ON dbo.JOB
AFTER INSERT
AS
BEGIN
    UPDATE j
      SET DateInserted = GETDATE() -- consider using GETUTCDATE()
    FROM JOB j
    INNER JOIN inserted i 
    ON i.PrimaryKeyName = JOB.PrimaryKeyName
END

但是,这可能会导致一些额外的交易开销,并且不会阻止某人将列更新为= NULL。但是,如果将其设为null会破坏某些内容,那么您应该将该列设为NOT NULL