来自触发器的消息不会显示

时间:2013-03-19 12:14:13

标签: sql-server triggers

我已经创建了用于检查值长度的触发器。我希望显示我自己的消息,而不是长度超过指定。创建触发器时没有错误。但是,如果我尝试使用超过指定值的创建记录,我只得到系统错误。如何让我也看到我的信息?感谢

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

1 个答案:

答案 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

     

字符串或二进制数据将被截断。   声明已经终止。

即使已经触发了触发器,它也会成功插入。