Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 exec raiserror  [new]
exec raiserror
Guest
Вот в начале хранимки помещаю проверку (тут упрощенно):
exec ('raiserror(''Error!'', 16, 1) return ')
Дальше идет куча действий.

Так вот, при выполнении, хранимка проделает все действия (судя по времени работы), выведет результаты работы селектов, и только потом сделает проверку, уберет результат селектов и выведет ошибку.

Почему так? Какова логика работы?
И можно каким-то образом засавить сразу делать проверку в этом подходе?
21 янв 13, 12:26    [13802052]     Ответить | Цитировать Сообщить модератору
 Re: exec raiserror  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
exec raiserror
Почему так? Какова логика работы?
raiserror выполняется сразу, а return относится к батчу exec(), а не к процедуре, кк я понимаю.
exec raiserror
И можно каким-то образом засавить сразу делать проверку в этом подходе?
Конечно можно, написать return без exec()
21 янв 13, 12:31    [13802105]     Ответить | Цитировать Сообщить модератору
 Re: exec raiserror  [new]
Гость333
Member

Откуда:
Сообщений: 3683
exec raiserror
exec ('raiserror(''Error!'', 16, 1) return ')
Какова логика работы?

Логика такова, что return в данном случае делается из текущего блока, то есть из динамического SQL.

А для чего понадобилось делать raiserror в динамике?
21 янв 13, 12:33    [13802131]     Ответить | Цитировать Сообщить модератору
 Re: exec raiserror  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
exec raiserror,

проверки выполняются именно там, где они написаны.
А вот сообщения складируются в буфер и выдаются после завершения.
Однако
exec ('raiserror(''Error!'', 16, 1) WITH NOWAIT;')
конца ждать не будет.
21 янв 13, 12:34    [13802137]     Ответить | Цитировать Сообщить модератору
 Re: exec raiserror  [new]
Glory
Member

Откуда:
Сообщений: 104751
raiserror ... WITH NOWAIT
Sends messages immediately to the client.
21 янв 13, 12:38    [13802159]     Ответить | Цитировать Сообщить модератору
 Re: exec raiserror  [new]
exec raiserror
Guest
ОК, всем большое спасибо!

В динамике нужно из-за входных параметров в виде названия базы и таблицы.
21 янв 13, 12:50    [13802274]     Ответить | Цитировать Сообщить модератору
 Re: exec raiserror  [new]
Glory
Member

Откуда:
Сообщений: 104751
exec raiserror
В динамике нужно из-за входных параметров в виде названия базы и таблицы.

Учите синтаксис

RAISERROR (N'This is message %s %d.', -- Message text.
           10, -- Severity,
           1, -- State,
           N'number', -- First argument.
           5); -- Second argument.
21 янв 13, 12:59    [13802350]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить