powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Генерация сообщения об ошибке (RAISERROR)
7 сообщений из 7, страница 1 из 1
Генерация сообщения об ошибке (RAISERROR)
    #32066858
oleg_rost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос по MS-SQL 2000.
Есть SP-ка, в которой в определенной ситуации должна генериться ошибка:

.....
SET ROWCOUNT @RecCount /*внешний параметр*/
SELECT ID FROM Table1 WHERE .....

IF @@ROWCOUNT = @RecCount BEGIN
.....
END ELSE BEGIN
....
RAISERROR('Ошибка!',16,1)
RETURN
END
.....

Но в данной ситуации ошибка не генерится. Никто не подскажет, в чем может быть дело?
Заранее благодарен!
...
Рейтинг: 0 / 0
Генерация сообщения об ошибке (RAISERROR)
    #32066892
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, условие @@ROWCOUNT = @RecCount выполняется.
Попробуйте задать @RecCount заведомо больше числа записей в Table1.
...
Рейтинг: 0 / 0
Генерация сообщения об ошибке (RAISERROR)
    #32066905
oleg_rost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... в том-то и дело, что ветка @@ROWCOUNT=@RecCount выполняется нормально, когда условие выполняется.
Почитал форум и понял, что не у одного меня такая канитель с вызовом SQL-исключений для Delphi.
Не хотелось бы связываться с NOCOUNT ON и OUTPUT-параметром, но, похоже, по-другому вопрос не решить....
...
Рейтинг: 0 / 0
Генерация сообщения об ошибке (RAISERROR)
    #32066918
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, почему же. Достаточно поместить возвращабельный селект после проверки с 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
...
Рейтинг: 0 / 0
Генерация сообщения об ошибке (RAISERROR)
    #32066919
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда в чем вопрос? Может вы от RAISERROR ожидаете той же
функциональности, что и от Win32 API RaiseException?
...
Рейтинг: 0 / 0
Генерация сообщения об ошибке (RAISERROR)
    #32066922
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно не будет генериться. т.к у вас в выборке несколько рекордсетов.
Это неудобно, но надо пройтись NextRecordset по всем рекордсетам и проверить статус ошибки.
...
Рейтинг: 0 / 0
Генерация сообщения об ошибке (RAISERROR)
    #32066930
oleg_rost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для меня так и осталось тайной, покрытой мракой, почему в одних случаях (кстати, с несколькими рекордсетами) возможность вызова исключения 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
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Генерация сообщения об ошибке (RAISERROR)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]