Я хочу восстановить одно и то же исключение в sql-сервере, которое произошло в моем блоке try. Я могу бросить одно и то же сообщение, но я хочу выбросить ту же ошибку.
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO Tags.tblDomain
(DomainName, SubDomainId, DomainCode, Description)
VALUES(@DomainName, @SubDomainId, @DomainCode, @Description)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
declare @severity int;
declare @state int;
select @severity=error_severity(), @state=error_state();
RAISERROR(@@Error,@ErrorSeverity,@state);
ROLLBACK TRANSACTION
END CATCH
RAISERROR(@@Error, @ErrorSeverity, @state);
Эта строка покажет ошибку, но я хочу, чтобы что-то вроде этого.
Это вызывает ошибку с номером ошибки 50000, но я хочу, чтобы число erron было выбрано, что я прохожу @@error
,
Я хочу зафиксировать эту ошибку no at frontend
то есть.
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Я хочу эту функциональность. которые не могут быть достигнуты с помощью повышения уровня. Я не хочу давать пользовательское сообщение об ошибке на задней панели.
RAISEERROR должен возвращаться ниже указанной ошибки, когда я передаю ErrorNo для броска в catch
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Строка 14 Нарушение ограничения UNIQUE KEY 'UK_DomainCode'. Не удается вставить дублирующий ключ в объекте 'Tags.tblDomain. Заявление завершено.
EDIT:
Что может быть недостатком использования блока catch try, если я хочу, чтобы исключение обрабатывалось во фронте, учитывая хранимую процедуру, содержит несколько запросов, которые необходимо выполнить