У меня есть код, который работает очень медленно. Псевдокод ниже.Оптимизируйте SQL-код, когда оператор
if flag = 'y'
Begin
insert into W (a, b, c)
select (case
when creditCard = 'N' then dbo.GetDecimal(W.USD)
when creditCard ='Y' then -dbo.GetDecimal(W.USD) end,
case
when creditCard = 'N' then dbo.GetDecimal(W.EUR)
when creditCard ='Y' then -dbo.GetDecimal(W.EUR) end,
A.c)
from table Wallet W
left outer join Country C (nolock)
on C.Location = W.Location
inner join Seller S (nolock)
on S.branch=S.branch and S.customerbase=W.customerbase and S.detail=''
where not (W.Location = 'USA' or (len(W.Location)=3 and upper(substring(W.Location,3,1))='A'))
end
else
begin
insert into W (d, e, f)
select (case
when creditCard = 'N' then dbo.GetDecimal(W.USD)
when creditCard ='Y' then -dbo.GetDecimal(W.USD) end,
case
when creditCard = 'N' then dbo.GetDecimal(W.EUR)
when creditCard ='Y' then -dbo.GetDecimal(W.EUR) end,
W.f)
from table Wallet W
left outer join Country C (nolock)
on C.Location = W.Location
inner join Seller S (nolock)
on S.branch=S.branch and S.customerbase=W.customerbase and S.detail=''
where not (W.Location = 'USA' or (len(W.Location)=3 and upper(substring(W.Location,3,1))='A'))
Могу ли я знать, поставив условие case when
снаружи (замените, если еще) будет 1. улучшить производительность запросов и 2. есть другой способ, чтобы оптимизировать этот код?
* dbo.Getdecimal хранимая процедура
Это огромный беспорядок. Укажите фактический код. – Amit
Заявления о случаях без END – Justin
Вам все еще нужно получить более ясный вопрос, см. [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –