2016-04-11 9 views

答えて

0

INSERTED擬似テーブルを使用しますが、ユニークなインデックスを使用してコードを使用しないようにしましょう。

CREATE UNIQUE INDEX UX_fnama ON fakultas(fnama) 

あなたがコードを使用する

IF EXISTS (SELECT * FROM fakultas WHERE fnama IN (SELECT fnama FROM INSERTED)) 
    ... 

をしたい場合はそれ以外の場合は、どちらのソリューションは、あなたがあなたのトリガでいくつかのミスを持つINSERT文

0

から複数の行を扱います。あなたはNEW.insertedNEW.fnamaを交換する必要があるので、

  1. テーブルに挿入されようとしたレコードは、提出挿入と呼ばれるに格納されています。

  2. あなたのトリガーは毎回1つの行だけが挿入されると想定しています。 しかし、これは当てはまりません。複数の行が表に挿入されることがあります。

  3. このトリガーは、挿入トリガーの代わりです。書かれているように、レコードがテーブルに挿入されることはありません。なぜなら、レコードをテーブルに挿入するには、挿入ステートメントをトリガー自体の中に記述する必要があるからです。

  4. トリガーの代わりにエラーを発生させるのは、通常は悪い習慣です。

このトリガーを削除し、代わりにfnama列に一意の制約を作成することをお勧めします。これにより、テーブルにユニークな値のみを挿入できるようになり、トリガの代わりにパフォーマンスが向上します。また、行を更新したり、既に別の行に存在する列に値を設定したりすることもありません。

ALTER TABLE fakultas 
    ADD CONSTRAINT UC_fnama UNIQUE (fnama); 
関連する問題