Один из комментариев в коде указывает на дальний лучший способ моделирования этого:
create table CogRates (
ProdMonth int not null,
CogsRate decimal(4,4) not null,
constraint PK_CogRates PRIMARY KEY (ProdMonth),
constraint CK_CogRates_Months CHECK (ProdMonth between 1 and 12)
)
go
insert into CogRates (ProdMonth,CogsRate) values
(1 ,0.0957),
(2 ,0.0904),
(3 ,0.0884),
(4 ,0.0906),
(5 ,0.0818),
(6 ,0.0787),
(7 ,0.0777),
(8 ,0.0769),
(9 ,0.0756),
(10,0.0778),
(11,0.0754),
(12,0.0787)
go
SELECT v.Date01, cg.CogsRate AS CogsRate
FROM dbo.vwUD15 v
inner join
CogRates cg
on cg.ProdMonth = LEFT(v.Key2, LEN(v.Key2) - 5)
Не пишите процедурный код, когда код на основе набора сделает работу.
Хранимые процедуры не могут быть объединены в большие запросы.Вы могли бы переместить свою логику в пользовательскую функцию, но когда это просто lookup , это то, что SQL превосходит в .(Хотя было бы предпочтительнее, если бы мы не выполняли манипуляции со значением столбца в правой части этого сравнения)
В общем, если вы планируете написать функцию (не хранимый процесс) иопределение детерминированное , а домен "маленький", рассмотрите возможность использования таблицы.В качестве бонуса вы также можете бесплатно получить обратную функцию, если вам это нужно.