Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
Вопрос такой. Можно ли сделать так. В процедуре обработка данных. В цикле. Для какойто записи срабатывает триггер в базе. Получить сообщение raiserror (сообщение ошибки, которое было сгенерировано) и продолжить выполнение для последующих записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 15:18 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
Используйте declare @message varchar(255) select @message='сообщение' print @message ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 15:21 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
ЭЭ... :) Это все понятно. Вопрос же был в другом - как получить сообщение, которое выдал триггер? Это раз И как после этого рэйзеррора продолжить работу дальше. Это два :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 15:52 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
1. получить текст select description from master..sysmessages where error=... но без подстановки параметров. подругому нельзя. 2. если записи вставляются по одной - никаких проблем продолжить. иначе никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 16:09 |
|
||
|
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:26 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
На красивость кода не претендую. Все время писал на АСА... Теперь вот пытаюсь понять как с АСЕ работать.. Язык как по мне намного беднее :( И жаль что нет ро-левел триггеров.... Если что не так пишу - тыкайте носом :) Буду только благодареен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 16:29 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
В master..sysmassages как я понял - хранятся системные ошибки. А для user-defined? Да и хорошо былобы получить то сообщение, которое было сгенерировано.... С уже семи подставленными параметрами. Неужели нельзя никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 16:32 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
На клиенте можно. внутри базы - нет. ЗЫ: sysusermessages для user-defined ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 17:09 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
Ну тут по идее как раз внутри базы хотелось бы... Потому как сообщение для рэйзеррора генерится в триггере и как раз оно интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 17:31 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
А установить @@sqlstate или @@error можно? Ну то есть - как поверить что была ошибка чтобы запомнить эту запись.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2006, 18:12 |
|
||
|
ASE и raiserror
|
|||
|---|---|---|---|
|
#18+
MichaelTimВопрос такой. Можно ли сделать так. В процедуре обработка данных. В цикле. Для какойто записи срабатывает триггер в базе. Получить сообщение raiserror (сообщение ошибки, которое было сгенерировано) и продолжить выполнение для последующих записей? Т.е. на сервере перехватить raiserror и продолжить далее ? Нет, так нельзя. Это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 01:54 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33864565&tid=2012713]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 437ms |

| 0 / 0 |
