|
|
|
Генерация сообщения об ошибке (RAISERROR)
|
|||
|---|---|---|---|
|
#18+
Вопрос по MS-SQL 2000. Есть SP-ка, в которой в определенной ситуации должна генериться ошибка: ..... SET ROWCOUNT @RecCount /*внешний параметр*/ SELECT ID FROM Table1 WHERE ..... IF @@ROWCOUNT = @RecCount BEGIN ..... END ELSE BEGIN .... RAISERROR('Ошибка!',16,1) RETURN END ..... Но в данной ситуации ошибка не генерится. Никто не подскажет, в чем может быть дело? Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 12:17:45 |
|
||
|
Генерация сообщения об ошибке (RAISERROR)
|
|||
|---|---|---|---|
|
#18+
Видимо, условие @@ROWCOUNT = @RecCount выполняется. Попробуйте задать @RecCount заведомо больше числа записей в Table1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 13:08:02 |
|
||
|
Генерация сообщения об ошибке (RAISERROR)
|
|||
|---|---|---|---|
|
#18+
... в том-то и дело, что ветка @@ROWCOUNT=@RecCount выполняется нормально, когда условие выполняется. Почитал форум и понял, что не у одного меня такая канитель с вызовом SQL-исключений для Delphi. Не хотелось бы связываться с NOCOUNT ON и OUTPUT-параметром, но, похоже, по-другому вопрос не решить.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 13:25:39 |
|
||
|
Генерация сообщения об ошибке (RAISERROR)
|
|||
|---|---|---|---|
|
#18+
Ну, почему же. Достаточно поместить возвращабельный селект после проверки с RAISERROR. Например, так: ..... SET ROWCOUNT @RecCount /*внешний параметр*/ SELECT ID INTO #tmp FROM Table1 WHERE ..... IF @@ROWCOUNT = @RecCount BEGIN ..... END ELSE BEGIN .... RAISERROR('Ошибка!',16,1) RETURN END ..... SELECT * FROM #tmp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 13:41:55 |
|
||
|
Генерация сообщения об ошибке (RAISERROR)
|
|||
|---|---|---|---|
|
#18+
Тогда в чем вопрос? Может вы от RAISERROR ожидаете той же функциональности, что и от Win32 API RaiseException? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 13:41:59 |
|
||
|
Генерация сообщения об ошибке (RAISERROR)
|
|||
|---|---|---|---|
|
#18+
Правильно не будет генериться. т.к у вас в выборке несколько рекордсетов. Это неудобно, но надо пройтись NextRecordset по всем рекордсетам и проверить статус ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 13:44:41 |
|
||
|
Генерация сообщения об ошибке (RAISERROR)
|
|||
|---|---|---|---|
|
#18+
Для меня так и осталось тайной, покрытой мракой, почему в одних случаях (кстати, с несколькими рекордсетами) возможность вызова исключения RAISERROR-ом есть, а в других - Delphi на них совершенно не реагирует. Исключение отлавливается в клиенте через OUTPUT-параметр: CREATE PROCEDURE AddCheck ... @RecCount integer, @ErrMessage varchar(255) OUTPUT AS .... SELECT @ErrMessage = NULL SET ROWCOUNT @RecCount SELECT ID FROM Table1 WHERE ... IF @@ROWCOUNT = @RecCount BEGIN ... END ELSE BEGIN ... SELECT @ErrMessage = 'Ошибка!' END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 13:57:42 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=46&tid=1818891]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 320ms |

| 0 / 0 |
