1

我正在研究 sql 中的触发器。我正在尝试执行更新触发器,但是我希望它仅在满足特定条件时才起作用。

例如,假设我有一个表 X 和两列 A、B。我希望仅当 A 小于 B 时才能更新 A 或 B 以更新新值。

所以我正在做这样的触发器

create trigger utrigger
on X
for update as
if (update(A) OR update(B))
begin


 if (A>B)
 RAISERROR (N' Incorrect %s %d.', -- Message text.
       10, -- Severity,
       1, -- State,
       N'number', -- First argument.
       5); -- Second argument.

结尾

但是我认为我做错了。这有什么问题?

4

1 回答 1

4

您需要使用 INSERTED 虚拟表。

create trigger utrigger
on X
for update as
if (update(A) OR update(B))
begin
 if exists (SELECT *   -- this subquery breaches the condition
            FROM INSERTED
            WHERE A>=B)    -- might need some isnull if nulls are not allowed
 RAISERROR (N' Incorrect %s %d.', -- Message text.
       10, -- Severity,
       1, -- State,
       N'number', -- First argument.
       5); -- Second argument.
end
于 2012-09-29T20:53:51.250 回答