我正在研究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.
端
但是我觉得我做错了。这有什么不对吗?
答案 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