Как в хранимой процедуре получить текст ошибки?

beerman
Дата: 18.01.2001 13:17:41
Когда я писал хранимую процедуру в MSSQL 7.0 у меня возникла следующая проблема: после выполнения очередной инструкции T-SQL происходила ошибка. Код ошибки я могу узнать из переменной @@ERROR. А вот как узнать текст? Я узнал, что
шаблоны текстов ошибок хранятся в таблице sysmessages базы данных master. Когда происходит ошибка в шаблон подставляются параметры (аналог - функция printf в Си) и получается сообщение, которое и выдаётся. При этом, можно сделать так, что ошибка будет фиксироваться в Errorlog. Но вот как её достать из хранимой процедуры ???
Дед Маздай
Дата: 22.01.2001 16:43:56
Если я правильно понял вопрос, то ответ тривиальный, т.к. никаких сложностей в вытаскивании @@error из sp нет:

create proc TestSP as
declare @status int
select 'blah-blah-blah'
set @status = @@error
if @status <> 0 return @status
select 1/0
set @status = @@error
if @status <> 0 return @status
select 'yoda-yoda-yoda'
set @status = @@error
if @status <> 0 return @status

declare @i int
exec @i = TestSP
select @i

Где set @status = @@error и if @status <> 0 return @status ставятся после каждого подозрительного на ошибку оператора.
beerman
Дата: 23.01.2001 09:59:52
Так я получу только код ошибки, а мне нужен текст (например, при делении на ноль - что-то вроде "Error. Division by zero")
SergSuper
Дата: 23.01.2001 11:30:28
По-моему это в принципе невозможно. Если только через ODS...
Дед Маздай
Дата: 23.01.2001 15:08:03
А может, вместо того, чтобы пытаться сконструировать свой текст ошибки, отлавливать уже готовый где-нибудь на клиенте?
Fompro
Дата: 25.01.2001 02:29:11
Зависит от клиента. В стндартной DB-LIB устанавливаются обработчики ошибок и сообщений, в качестве параметров к-ым передаётся и код ошибки и Severity и, конечно, текст. Если же Вы собираетесь обрабатывать текст ошибки на сервере, то зачем Вам это нужно? (Принципиально возможно через ODS). Если хотите заменить текст на более вразумительный для пользователя - пишите после проверки свой RAISERROR("Ошибка записи туда-то ...")
Staple
Дата: 25.01.2001 10:28:29
Хи-хи-хи. Я думаю, человек уже давно процедуру отладил, а ответы все приходят...
(Извиняюсь за полную чушь, но меня с бодуна частенько тянет немного пошалить.)
beerman
Дата: 29.01.2001 11:15:23
Да, на клиенте можно получить (пробовал на ASP'е через ADO)