1

私はSQLでトリガーに取り組んでいます。更新トリガーを実行しようとしていますが、特定の条件が満たされた場合にのみ機能させたいです。

たとえば、テーブルXと2つの列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 に答える