2013-03-19 154 views
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 

回答

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行

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

即使触发器被允许触发,它将执行成功的插入。

+0

因此,据我所知没有合适的替换系统消息(出现比数据完整性检查失败)或添加到此消息我? – genky 2013-03-19 13:37:23

+0

@genky - 不,从SQL Server端无法替换该消息或添加额外的消息。 – 2013-03-19 13:39:13

+0

但我的消息可以在应用程序的UI部分看到,它使用适当的数据库? – genky 2013-03-19 13:42:18