У меня 3 таблицы Site, Price и PriceMonth. Сайт имеет много цен (присоединился к siteId). PriceMonth содержит дату, которую ищет Price (присоединяется к PriceMonth).
Идея заключается в том, что ценовые записи создаются при создании сайта в качестве заполнителей.
Когда пользователь щелкает строку цены в представлении - мне нужно обновить цены только на оставшуюся часть этого года и только на этот месяц.
Я написал код для хранимой процедуры, которая работает. Пожалуйста, пока игнорируйте жестко закодированные значения. Это работает, но можно ли сделать его проще и эффективнее?
Код:
DECLARE @startDate smallDateTime
DECLARE @roc decimal(5,2)
DECLARE @Lec decimal(5,2)
DECLARE @power decimal(5,2)
SET @roc = (SELECT roc FROM [Price] WHERE siteId = 77 AND PriceMonthId = 527)
SET @lec = (SELECT lec FROM [Price] WHERE siteId = 77 AND PriceMonthId = 527)
SET @power = (SELECT [power] FROM [Price] WHERE siteId = 77 AND PriceMonthId = 527)
SET @startDate = (Select [month] FROM [PriceMonth] WHERE PriceMonthId = 527)
UPDATE
Price
SET
roc = @roc
, lec = @lec
, [power] = @power
FROM
Price
INNER JOIN priceMonth pm ON price.priceMonthId = pm.priceMonthId
WHERE
(DATEPART(mm,pm.[Month]) > DATEPART(mm,@startDate) AND
(DATEPART(yy,pm.[Month]) = DATEPART(yy,@startDate))) AND
price.SiteId = 77