2013-03-19 5 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') 

Производит:

Msg 8152, Level 16, State 14, линия 1

Строка или двоичные данные будут усечены. Заявление было прекращено.

Несмотря на то, был триггером разрешили стрелять, он бы выполнил успешную вставку.

+0

так что, насколько я понимаю, нет возможности заменить системное сообщение (которое возникает, если проверка целостности данных не выполняется) или добавить к этому сообщению мое? – genky

+0

@genky - Нет, нет способа заменить сообщение или добавить дополнительный, со стороны SQL Server. –

+0

, но будет ли отображаться мое сообщение в части приложения пользовательского интерфейса, в которой используется соответствующая база данных? – genky