Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Полный текст ошибки  [new]
RuslanSharipov
Member

Откуда:
Сообщений: 193
Добрый вечер. Подскажите пожалуйста как получить "предыдущую ошибку" в блоке catch:

create procedure dbo.test
as begin
  create table #test (
	id int not null,
	name varchar(10)
  );

  insert into #test(id, name)
  values (1, 'a'), (1, 'b');

  alter table #test add constraint testPK primary key clustered (id);
end;
go

begin try
  execute dbo.test;
end try
begin catch	
  select
	ERROR_NUMBER() AS ErrorNumber,
	ERROR_SEVERITY() AS ErrorSeverity,
	ERROR_STATE() AS ErrorState,
	ERROR_PROCEDURE() AS ErrorProcedure,
	ERROR_LINE() AS ErrorLine,
	ERROR_MESSAGE() AS ErrorMessage;
end catch;

drop procedure dbo.test;


В данном случае error_message вернет "Нельзя создать ограничение. См. предыдущие ошибки.", хотя на самом деле было выдано две ошибки:

Сообщение 1505, уровень 16, состояние 1, строка 11
Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем "dbo.#test_______________________________________________________________________________________________________________0000007252FB" и индекса с именем "testPK". Повторяющееся значение ключа: (1).
Сообщение 1750, уровень 16, состояние 0, строка 11
Нельзя создать ограничение. См. предыдущие ошибки.
13 фев 19, 23:23    [21808998]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36970
На стороне сервера -- никак.
14 фев 19, 02:39    [21809026]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
prog882
Member

Откуда:
Сообщений: 4
RuslanSharipov,
begin catch	
;throw
end catch;
15 фев 19, 09:08    [21810184]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
RuslanSharipov,

DDL операции не рекомендуют использовать в процедурах. Возможно, это одна из причин.
15 фев 19, 13:04    [21810507]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
RuslanSharipov,

DDL операции не рекомендуют использовать в процедурах. Возможно, это одна из причин.
\
Пятница перестала быть томной
15 фев 19, 13:07    [21810516]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Владислав Колосов
RuslanSharipov,
DDL операции не рекомендуют использовать в процедурах. Возможно, это одна из причин.

то есть не рекомендована работа со временными таблицами?
15 фев 19, 14:28    [21810687]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
Shakill,

придирки. Здесь важен дух, а не буква. Много писать, лень.
15 фев 19, 14:50    [21810723]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
Владислав Колосов
DDL операции не рекомендуют использовать в процедурах
Кто не рекомендует? И в каком контексте?
15 фев 19, 14:53    [21810725]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
RuslanSharipov
Member

Откуда:
Сообщений: 193
prog882,
throw лишь пробросит исключение, мне же надо его обработать на уровне сервера.

Понятно, что на стороне сервера это к сожалению невозможно в таком контексте. Безусловно просто стоит избегать таких случаев(и
в приведенном коде вначале создавать индекс, а только потом вставлять записи в таблицу). Просто думал, что есть возможность как-то вытащить, к примеру, исходя из идентификатора сеанса, необходимую информацию хотя бы из журнала ошибок.
15 фев 19, 21:41    [21811253]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
RuslanSharipov
Member

Откуда:
Сообщений: 193
Владислав Колосов
RuslanSharipov,

DDL операции не рекомендуют использовать в процедурах. Возможно, это одна из причин.


Эдакая невидаль. Извольте цитату и автора
15 фев 19, 21:43    [21811257]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36970
Владислав Колосов
Shakill,

придирки. Здесь важен дух, а не буква. Много писать, лень.
Нет никакого духа, кроме тухлячка. MS до сих пор в своем enterprise-решении не может ни в call stack, ни в нормальный error-хэндлинг.

Сообщение было отредактировано: 15 фев 19, 21:50
15 фев 19, 21:47    [21811259]     Ответить | Цитировать Сообщить модератору
 Re: Полный текст ошибки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
Закидали контекстом :) Я бы добавил к этому списку пользовательские сообщения для ограничений. За 20 с лишним лет можно было придумать способ.
18 фев 19, 12:54    [21812864]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить