我已经创建了用于检查值长度的触发器。我希望显示我自己的消息,而不是长度超过指定。创建触发器时没有错误。但是,如果我尝试使用超过指定值的创建记录,我只得到系统错误。如何让我也看到我的信息?感谢
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
答案 0 :(得分:1)
在触发器触发之前执行基本数据完整性检查,如果失败,则根本不会调用触发器。
因此,如果您正在尝试替换或扩充现有警告(即,如果列的长度定义为(10)
),那么您正试图设置新的错误消息触发器。
E.g:
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')
产地:
Msg 8152,Level 16,State 14,Line 1
字符串或二进制数据将被截断。 声明已经终止。
即使已经触发了触发器,它也会成功插入。