SQL Update触发条件

时间:2012-09-29 20:47:38

标签: sql sql-server triggers

我正在研究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.

但是我觉得我做错了。这有什么不对吗?

1 个答案:

答案 0 :(得分: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