& Ldquo; право & rdquo; способ проверки параметров хранимой процедуры

Я решил эту проблему, как ваша, с помощью следующих команд:

git reset --hard <commit-hash> 
git push -f <remote> <local branch>:<remote branch> 
30
задан Matthew Murdoch 29 June 2009 в 12:21
поделиться

3 ответа

Я не думаю, что существует единственный "правильный" способ сделать это.

Мои собственные предпочтения были бы похожи на ваш второй пример, но с отдельным этапом проверки для каждого параметр и более подробные сообщения об ошибках.

Как вы говорите, это немного громоздко и некрасиво, но назначение кода очевидно любому, кто его читает, и он выполняет свою работу.

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
47
ответ дан 27 November 2019 в 18:28
поделиться

Обычно мы избегаем 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
1
ответ дан 27 November 2019 в 18:28
поделиться

Я предпочитаю вернуться как можно скорее и не вижу смысла в том, чтобы все возвращалось из той же точки в конце процедуры. Я приобрел эту привычку, занимаясь сборкой, много лет назад. Кроме того, я всегда возвращаю значение:

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
0
ответ дан 27 November 2019 в 18:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: