私は列を制御するためのトリガーを作成しています。スクリプトは私が望むように動作しますが、私の問題はraiseerrorにあります。私はユーザーにエラーメッセージを表示せずにトリガーを動作させたい。ボックスメッセージなしのトリガー実行を中断する(tsql)
エラーメッセージを表示せずにraiseerrorに相当するものが分かっている人はいますか?
代わりに別のエラーメッセージが表示されるロールバックトランザクションを試みましたが、トリガーの実行を中断しなかったリターンを試しました。
これが私のトリガーです:
DECLARE @val varchar(9)
SELECT @val= [DC_Piece]
from INSERTED
where INSERTED [DC_Domaine]=0 and INSERTED.[DC_IdCol]=6
IF UPDATE([DC_Piece])
BEGIN
IF NOT EXISTS(select [DO_PIECE]
from DOCEN
where @val= [DO_Piece] and [DO_Domaine]=0 and [DO_Type]=6)
RAISERROR('STOP',11,1)
END
私にあなたが行ごと(完全声明ごとに一度、それはと呼ばれることを考慮に入れて、あなたのトリガーを書き換える必要はありません
を - それは* **ではありません* ケース。トリガは**文ごとに** **起動します。したがって、INSERTステートメントが25行を挿入すると、トリガは**一度**発生しますが、Insertedは25行を含みます。あなたのコードがここで選択する25行のうちどれですか? 'SELECT @ val = [DC_Piece] from INSERTED' - それは非決定論的です - あなたは*任意の*行を取得し、**あなたは**他のすべてを無視します!これを考慮に入れてトリガーを書き直す必要があります。 –
よろしくお願いします。 – hollyx
私の応答を参照してください –