Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
3-82065
cancel
2003-09-02 15:51
2003.09.25
GROUP BY...


1-82322
Hawk
2003-09-13 17:12
2003.09.25
Как зарегистрировать службу?


14-82502
data
2003-09-05 14:30
2003.09.25
сказка о сисадмине - 2


3-82113
LeSS
2003-09-04 16:41
2003.09.25
Нужно создать таблицу dbf


4-82541
xZero
2003-07-23 22:43
2003.09.25
Меню





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский