0

値の長さをチェックするためのトリガーを作成しました。指定した長さよりも自分のメッセージを表示したい。トリガーはエラーなしで作成されました。しかし、指定された値を超える値でレコードを作成しようとすると、システム エラーのみが発生します。自分のメッセージも表示するにはどうすればよいですか? ありがとう

CREATE TRIGGER check_region_name_length
ON Region
INSTEAD OF INSERT
AS
BEGIN
IF EXISTS
(
SELECT inserted.RegionName FROM inserted
WHERE LEN(inserted.RegionName)>10
)
BEGIN
    RAISERROR('RegionName value is longer than specified', 10, 1);
    ROLLBACK TRANSACTION;
    RETURN;
END;
END    
GO
4

1 に答える 1

1

基本的なデータ整合性チェックは、トリガーが起動するかなり前に実行され、失敗した場合、トリガーはまったく呼び出されません。

そのため、既存の警告を置き換えたり増やしたりしようとしている場合 (つまり、列の長さが として定義されている(10)場合)、トリガーから新しいエラー メッセージを設定しようとして何も隠れていません。

例えば:

create table T (Val1 char(1) not null)
go
create trigger T_T on T instead of insert
as
    insert into T (Val1)
    select SUBSTRING(Val1,1,1) from inserted
go
insert into T (Val1) values ('ab')

プロデュース:

メッセージ 8152、レベル 16、状態 14、行 1

文字列型やバイナリは省略されます。ステートメントは終了されました。

とはいえ、トリガーの起動が許可されていれば、挿入は成功していたはずです。

于 2013-03-19T13:24:53.807 に答える