除非另有明确说明,否则有没有办法在所有更新中强制 table 值为 0?
Is there a way to force a table value to be 0 on all updates unless explicitly stated otherwise?
我有一个 SQL table,其中包含用户必须确认的各种日志条目。为了促进这一点,在 UPDATE
或 INSERT
上有一个触发器用于 table,每当添加或更改日志条目时,它会在另一个 table 中创建条目。它运作良好,直到最近决定在所有情况下,除了一个(现在一个......这可能会在未来改变),触发器将正常触发。在一种情况下,专门用于拒绝升级日志条目的进度,它需要采取不同的行动。
我们希望保留该触发器,因为有很多地方我们通过直接插入或更新其中的值来更新 table。在与各种可能性进行了多次角力之后,决定攻击日志条目的另一个值,有点指示我们是否希望触发器触发 "normally" 或在特殊情况下,一种不完美的方法,但似乎是危害最小的情景。
不幸的是,当我坐下来实施它时,Fridge Logic 已经启动。在那种情况下显式设置该位没有问题。但是,当然,一旦我们特别处理了这个,我们就不想保留它,并且更改该位将被视为将再次触发触发器的更新。
所以,长话短说,有没有办法设置 table 以便在插入或更新时,如果未指定值,则默认为不执行特殊操作的安全值触发器?
用于插入的默认约束,但对于更新,您将需要一个触发器
有点像.....
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
您可以使用它向列添加默认值。
ALTER TABLE MyTable ADD CONSTRAINT DF_SomeName DEFAULT SomeValue FOR MyColumn;
我有一个 SQL table,其中包含用户必须确认的各种日志条目。为了促进这一点,在 UPDATE
或 INSERT
上有一个触发器用于 table,每当添加或更改日志条目时,它会在另一个 table 中创建条目。它运作良好,直到最近决定在所有情况下,除了一个(现在一个......这可能会在未来改变),触发器将正常触发。在一种情况下,专门用于拒绝升级日志条目的进度,它需要采取不同的行动。
我们希望保留该触发器,因为有很多地方我们通过直接插入或更新其中的值来更新 table。在与各种可能性进行了多次角力之后,决定攻击日志条目的另一个值,有点指示我们是否希望触发器触发 "normally" 或在特殊情况下,一种不完美的方法,但似乎是危害最小的情景。
不幸的是,当我坐下来实施它时,Fridge Logic 已经启动。在那种情况下显式设置该位没有问题。但是,当然,一旦我们特别处理了这个,我们就不想保留它,并且更改该位将被视为将再次触发触发器的更新。
所以,长话短说,有没有办法设置 table 以便在插入或更新时,如果未指定值,则默认为不执行特殊操作的安全值触发器?
用于插入的默认约束,但对于更新,您将需要一个触发器
有点像.....
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
您可以使用它向列添加默认值。
ALTER TABLE MyTable ADD CONSTRAINT DF_SomeName DEFAULT SomeValue FOR MyColumn;