Sql Server (нарушение режима и выполнение операций в указанном порядке) - PullRequest
1 голос
/ 27 марта 2012

У меня есть значение varchar @Order как «ST, OT, DT» ИЛИ «OT, ST, DT» и т. Д. Со всеми возможными комбинациями ST, OT, DT.

Затем я хочу реализовать логику в хранимой процедуре, как показано ниже для @order = 'ST, OT, DT', если ST идет первым, затем вычесть из @SThours, если @SThours равно нулю, вычесть из @OThours, если@OThours равно нулю, вычесть из @ DThours

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

1 Ответ

1 голос
/ 27 марта 2012

Вот что вы можете сделать:

declare @valueToDeductFrom int, @currentIndex int, @currentFieldName char(2)

set @valueToDeductFrom = 0
set @currentIndex = 1

while @currentIndex < 8 and @valueToDeductFrom = 0
begin
    set @currentFieldName = substring(@order, @currentIndex, 2)

    set @valueToDeductFrom = 
        case 
            when @currentFieldName = 'ST' then @SThours
            when @currentFieldName = 'OT' then @OThours
            when @currentFieldName = 'DT' then @DThours
            else 0
        end

    set @currentIndex = @currentIndex + 3
end

-- do something with @valueToDeductFrom here... Probably deduct from it. :)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...