当一次性插入多个记录时,我们在下面的表/列中偶尔会出现EMPTY记录。虽然从技术上讲这是允许的,因为列可以为空,但默认约束应该适用于插入的每一行。
ALTER TABLE [dbo].[JOB] ADD [DATE_CREATED] [nvarchar](35) NULL CONSTRAINT [DF_JOB_DATE_CREATED] DEFAULT (sysdatetime())
我能想到的一个可能原因是“默认只会在您未明确插入该列时才适用”。但我无法找到任何代码,但我仍然在努力。还有其他可能的原因?
我们在SQL Server 2012上。该列的目的是捕获创建的处理日期和时间。我们不能将此列设为不可为空,因为这是一个不应对业务产生影响的报告列。
感谢您的建议。
答案 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
。