Я решил эту проблему, как ваша, с помощью следующих команд:
git reset --hard <commit-hash>
git push -f <remote> <local branch>:<remote branch>
Я не думаю, что существует единственный "правильный" способ сделать это.
Мои собственные предпочтения были бы похожи на ваш второй пример, но с отдельным этапом проверки для каждого параметр и более подробные сообщения об ошибках.
Как вы говорите, это немного громоздко и некрасиво, но назначение кода очевидно любому, кто его читает, и он выполняет свою работу.
IF (ISNULL(@fooInt, 0) = 0)
BEGIN
RAISERROR('Invalid parameter: @fooInt cannot be NULL or zero', 18, 0)
RETURN
END
IF (ISNULL(@fooString, '') = '')
BEGIN
RAISERROR('Invalid parameter: @fooString cannot be NULL or empty', 18, 0)
RETURN
END
Обычно мы избегаем raiseerror () и возвращаем значение, указывающее на ошибку, например отрицательное число:
if <errorcondition>
return -1
Или передать результат в двух выходных параметрах:
create procedure dbo.TestProc
....
@result int output,
@errormessage varchar(256) output
as
set @result = -99
set @errormessage = null
....
if <errorcondition>
begin
set @result = -1
set @errormessage = 'Condition failed'
return @result
end
Я предпочитаю вернуться как можно скорее и не вижу смысла в том, чтобы все возвращалось из той же точки в конце процедуры. Я приобрел эту привычку, занимаясь сборкой, много лет назад. Кроме того, я всегда возвращаю значение:
RETURN 10
Приложение отображает фатальную ошибку при положительных числах, а при отрицательных значениях - предупреждающее сообщение пользователя.
Мы всегда передаем обратно параметр OUTPUT с текстом сообщения об ошибке. .
пример:
IF ~error~
BEGIN
--if it is possible to be within a transaction, so any error logging is not ROLLBACK later
IF XACT_STATE()!=0
BEGIN
ROLLBACK
END
SET @OutputErrMsg='your message here!!'
INSERT INTO ErrorLog (....) VALUES (.... @OutputErrMsg)
RETURN 10
END