Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
19.07.2006, 15:18
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
Вопрос такой. Можно ли сделать так. В процедуре обработка данных. В цикле. Для какойто записи срабатывает триггер в базе. Получить сообщение raiserror (сообщение ошибки, которое было сгенерировано) и продолжить выполнение для последующих записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 15:21
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
Используйте declare @message varchar(255) select @message='сообщение' print @message ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 15:52
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
ЭЭ... :) Это все понятно. Вопрос же был в другом - как получить сообщение, которое выдал триггер? Это раз И как после этого рэйзеррора продолжить работу дальше. Это два :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 16:09
|
|||
|---|---|---|---|
ASE и raiserror |
|||
|
#18+
1. получить текст select description from master..sysmessages where error=... но без подстановки параметров. подругому нельзя. 2. если записи вставляются по одной - никаких проблем продолжить. иначе никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 16:26
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
Вот примерно код - просто так накидал чтобы объяснить create table dbo.test_table(pkey int not null,value varchar(10) null) insert into dbo.test_table values(1,'') insert into dbo.test_table values(2,'') insert into dbo.test_table values(3,'') create trigger dbo.test_tablee_trg on dbo.test_table for update as begin declare _cur cursor for select i.pkey from inserted i declare @c_pkey int open _cur fetch _cur into @c_pkey while (@@sqlstatus=0) begin if @c_pkey=2 begin rollback trigger with raiserror 20001 'My msg!' return end fetch _cur into @c_pkey end close _cur deallocate cursor _cur end create procedure dbo.test_proc as begin declare _cur cursor for select i.pkey from dbo.test_table i declare @c_pkey int,@msg varchar(10) open _cur fetch _cur into @c_pkey while (@@sqlstatus=0) begin update dbo.test_table set value =str(@c_pkey) where pkey=@c_pkey select @msg=str(@c_pkey) print @msg fetch _cur into @c_pkey end close _cur deallocate cursor _cur end exec dbo.test_proc тут при вызове в принте получаем 1 2 3 Все нормально - то есть после ошибки продолжает выполнение, но! после выполнения процедуры пишет что она была выполнена с таким то рэйзеррором. От этого можно избавиться? И получить сообщение raiserror 20001 'My msg!' - можно? Очень бы хотелось select * from dbo.test_table Тут все корректно - проапдейтило только 1 и 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 16:29
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
На красивость кода не претендую. Все время писал на АСА... Теперь вот пытаюсь понять как с АСЕ работать.. Язык как по мне намного беднее :( И жаль что нет ро-левел триггеров.... Если что не так пишу - тыкайте носом :) Буду только благодареен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 16:32
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
В master..sysmassages как я понял - хранятся системные ошибки. А для user-defined? Да и хорошо былобы получить то сообщение, которое было сгенерировано.... С уже семи подставленными параметрами. Неужели нельзя никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 17:09
|
|||
|---|---|---|---|
ASE и raiserror |
|||
|
#18+
На клиенте можно. внутри базы - нет. ЗЫ: sysusermessages для user-defined ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 17:31
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
Ну тут по идее как раз внутри базы хотелось бы... Потому как сообщение для рэйзеррора генерится в триггере и как раз оно интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.07.2006, 18:12
|
|||
|---|---|---|---|
|
|||
ASE и raiserror |
|||
|
#18+
А установить @@sqlstate или @@error можно? Ну то есть - как поверить что была ошибка чтобы запомнить эту запись.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.07.2006, 01:54
|
|||
|---|---|---|---|
ASE и raiserror |
|||
|
#18+
MichaelTimВопрос такой. Можно ли сделать так. В процедуре обработка данных. В цикле. Для какойто записи срабатывает триггер в базе. Получить сообщение raiserror (сообщение ошибки, которое было сгенерировано) и продолжить выполнение для последующих записей? Т.е. на сервере перехватить raiserror и продолжить далее ? Нет, так нельзя. Это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=55&mobile=1&tid=2012713]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
23ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 302ms |

| 0 / 0 |
