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