我有一个SQL表,其中包含必须由用户确认的各种日志条目。为了实现这一点,在UPDATE
或INSERT
上有一个触发器,无论何时添加或更改日志条目,该表都会在另一个表中创建条目。直到最近才决定在所有情况下只有一个(现在一个......这可能在未来发生变化),触发器会正常启动。在一种情况下,特别是拒绝升级日志条目的进度,它需要采取不同的行动。
我们希望保留该触发器,因为我们通过直接插入或更新其中的值来更新表的地方很多。在与可能性进行了大量摔跤之后,决定再次攻击一个日志条目的值,一个表示我们是否希望触发器“正常”触发,或者在特殊情况下,这是一个不完美的方法,但似乎是最不利的方法情景。
不幸的是,当我坐下来实施它时,冰箱逻辑已经开始了。在这种情况下明确设置位是没有问题的。但是,当然,一旦我们特别处理了这一点,我们就不想保留它,而改变位将被视为一次更新,它会再次触发触发器。
所以,长话短说,有没有办法设置一个表,以便在插入或更新时,如果没有指定值,它默认为不执行特殊触发的安全值?
答案 0 :(得分:1)
插入的DEFAULT CONSTRAINT但是对于更新,您需要一个触发器
像......这样的事情。CREATE TRIGGER tr_set_Defaults
ON dbo.SomeTable
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE t
SET t.Col1 = 0
FROM dbo.SomeTable t
INNER JOIN inserted i ON T.PK_Column = i.PK_Column
WHERE i.Col1 IS NULL --<-- Columns of intrest
END
答案 1 :(得分:0)
您可以使用此功能向列添加默认值。
ALTER TABLE MyTable ADD CONSTRAINT DF_SomeName DEFAULT SomeValue FOR MyColumn;