Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.25;
Скачать: CL | DM;

Вниз

подскажите как выдать сообщение пользователю из триггера   Найти похожие ветки 

 
diokant   (2003-09-05 13:10) [0]

Дорогие мастера,
есть тригер таблицы MS SQL Server
в нем реализовано несколько проверок
подскажите, как выдать сообщение пользователю из триггера о причинах "ошибки".


 
Mike Kouzmine ©   (2003-09-05 13:15) [1]

Exception


 
diokant   (2003-09-05 13:39) [2]

А можно немного подробнее?


 
Smashich ©   (2003-09-05 13:42) [3]

RAISERROR
Returns a user-defined error message and sets a system flag to record that an error has occurred. Using RAISERROR, the client can either retrieve an entry from the sysmessages table or build a message dynamically with user-specified severity and state information. After the message is defined it is sent back to the client as a server error message.


 
Smashich ©   (2003-09-05 13:44) [4]

там и поподробнее и пример есть.
SQL Server Books Online....


 
Vuk ©   (2003-09-05 13:45) [5]

Если будете писать raiserror в триггере, то не забудьте откатить транзакцию, в которой триггер выполняется. То есть обычно пишется так:

if (условие)
begin
raiserror(....)
rollback tran
end


 
diokant   (2003-09-05 14:13) [6]

>if (условие)
>begin
>raiserror(....)
>rollback tran
>end

Годится, но как быть, если необходимо в тригере изменить данные в других таблицах
допустим проверку я сделал - все Ок! следовательно можно изменить данные, а непосредственно измененить не удается(другой пользователь изменил пока я проверял или...) sql выдаст свое сообщение

есть ли в MS SQL что-то типа
try
...
except
...
end


 
diokant   (2003-09-05 14:50) [7]

Подскажите, пожалуйста, есть ли другие варианты кроме

>if (условие)
>begin
>raiserror(....)
>rollback tran
>end


 
Polevi ©   (2003-09-05 14:53) [8]

нет, чем тебя этот не устраивает непонятно


 
diokant   (2003-09-05 15:24) [9]

В триггере мне необходимо выполнять изменения в других таблицах.

Не устраивает так как:
1. Проверок может быть несколько и пока я буду проверять можно ли проводить изменения в других таблицах - другие пользователи могут изменить за это время данные в этих таблицах и фактически проводить изменения будет нельзя.

2. Учитывая то, что в других таблицах могут быть свои тригеры и ограничения, необходимо все их учесть в этом условии, а учитывая, что эти ограничения и тригеры могут измениться через какое-то время прийдется изменить и эту проверку, а это может быть не одно место...

3. если бы можно было сделать что-то типа
------------
try
...
except
...
end
--------------
то я бы по факу определил - проведены изменения или нет - если нет, то сгенерировал бы сообщение, не вникая в детали, т.е почему в другой таблице неполучилось изменить. Не получилось и все - этого достаточно.


 
Nikky ©   (2003-09-05 15:28) [10]


> diokant (05.09.03 15:24) [9]


в грамотно спроектированной БД описанных проблем быть не должно


 
Vuk ©   (2003-09-05 15:33) [11]

А @@error кто мешает проверять?


 
jocko ©   (2003-09-05 16:35) [12]

1. Я бы посоветовал разобраться какие бывают блокировки, возможно это помогло бы решить проблему одновременного изменения таблиц...
2. Целостность на тригерах, мое мнение, не прозрачна и может вызывать в последствии проблемы, удобнее при тех же условиях использовать хран. проц., а тригеры оставить для логов.
3. raiserror и rollback помоему единственный вариант при операциях с данными :-)


 
diokant   (2003-09-05 17:06) [13]

>@@error
Вроде бы годится. Спасибо.
Но в зависимости от характера ошибки(серьезности) не всегда срабатывает эта схема так как бывает до троверки дело не доходит и дальнейшее выполнение прекращается.

***************************
>3. raiserror и rollback помоему единственный вариант при >операциях с данными :-)

А чем плох вариант тригеров с анализом @@error?



Страницы: 1 вся ветка

Текущий архив: 2003.09.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
3-82146
Васёк
2003-09-03 18:09
2003.09.25
XPman


14-82447
Soft
2003-09-07 13:58
2003.09.25
Что такое ЗЛО?


14-82412
clickmaker
2003-09-09 11:37
2003.09.25
Ошибка OLE/DB Provider: Невозможно найти устанавливаемый ISAM


7-82518
Шустрый
2003-07-12 07:35
2003.09.25
Мой exe шник на чужом винте


1-82325
SomeBody
2003-09-13 17:04
2003.09.25
TOffice97Button