Оптимизация запросов для сокращения периода времени запроса - PullRequest
0 голосов
/ 17 мая 2018

У меня есть запрос ниже:

declare @max int

select @max = max(len(RPVINVNoSpace)) from jde_SupplierInvoices
update jde_SupplierInvoices set RPVINVNumeric = ''

declare @loop int = 1
while @loop <= @max

begin 

update jde_SupplierInvoices set RPVINVNumeric = RPVINVNumeric + 
    case when substring(RPVINVNoSpace,@loop,1) in ('0','1','2','3','4','5','6','7','8','9')
            then substring(RPVINVNoSpace,@loop,1)
            when substring(lower(RPVINVNoSpace),@loop,3) = 'jan' then '01'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'feb' then '02'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'mar' then '03'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'apr' then '04'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'may' then '05'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'jun' then '06'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'jul' then '07'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'aug' then '08'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'sep' then '09'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'oct' then '10'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'nov' then '11'
            when substring(lower(RPVINVNoSpace),@loop,3) = 'dec' then '12'
            else ''
    end
set @loop = @loop + 1
end

Задача состоит в том, чтобы придумать лучший способ для повторной реализации этого, и CLR не допускается. В основном этот запрос обновляет значение столбца (RPVINVNumeric) до числового значения, полученного из другого столбца (RPVINVNoSpace), который состоит из буквенно-цифровых символов. Таблица содержит миллионы строк, и запуск сценария занимает около 4 минут. Вот пример данных для справки:

образец данных изображения

Я не могу отформатировать снимок экрана с дальнейшими извинениями за это. Любая помощь будет высоко ценится.

Спасибо, Arti

...