Я нашел код, приведенный ниже в нашей хранимой процедуры:Использование Обработка ошибок в хранимой процедуре
BEGIN TRAN
SET NOCOUNT ON
DECLARE @rerror As Int
if not exists(select * from OfficeSchedule
where OfficeID = @officeid and WeekDate = @weekdate)
begin
INSERT INTO OfficeSchedule (OfficeID, WeekDate, Status, CreatedBy, CreatedDate, RowStatus)
VALUES (@officeid, @weekdate, 'U', @createdby, GetDate(), 'A')
end
SET @rerror = @@error
IF @rerror <> 0 BEGIN
ROLLBACK TRAN
END
ELSE BEGIN
COMMIT TRAN
SELECT @@identity
END
Какова цель переменной @error
. Если вставка терпит неудачу, транзакция не откат? Если я изменил код, обработав блок else, как показано ниже:
INSERT INTO OfficeSchedule (OfficeID, WeekDate, Status, CreatedBy, CreatedDate, RowStatus)
VALUES (@officeid, @weekdate, 'U', @createdby, GetDate(), 'A')
end
Else
begin
INSERT INTO OfficeSchedule (OfficeID, WeekDate, Status, CreatedBy, CreatedDate, RowStatus)
VALUES (@officeid, getdate(), 'U', @createdby, GetDate(), 'A')
end
то необходимо ли использовать обработку ошибок?
Получите ли мы какие-либо преимущества, используя error handling
в хранимой процедуре?
Оцените свои предложения.
Спасибо
'НАЧАТЬ TRY/END TRY CATCH НАЧАТЬ/END CATCH', транзакции в TRY блоке обработки ошибок в блоке поймать – lad2025
Возвращает номер ошибки для утверждения последней Transact-SQL, выполняемой HTTP://stackoverflow.com/questions/31684475/ – wiretext