我有3個網站,價格和PriceMonth。網站有很多價格(加入siteId)。 PriceMonth持有Price查詢的日期(加入PriceMonth)。SQL更新 - 是否有一個更優雅和有效的方式來做到這一點?
這個想法是,當網站創建爲佔位符時創建價格記錄。
當用戶點擊視圖中的價格行時 - 我只需要更新當年剩餘時間的價格並從當月開始。
我已經編寫了一個存儲過程的代碼。現在請忽略硬編碼值。它的工作原理,但它可以變得更簡單,更高效?
代碼:
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
你能解釋爲什麼你需要佔位符嗎?爲什麼不直接在實際數據中插入價格? – JohnFx 2009-10-03 15:18:49
當然,這是企業的一項要求,所以他們不必一年的所有價格。我要求改變這一點,但我不允許 - 所以簡而言之,這並不重要 - 我需要它們。 – Davy 2009-10-03 15:22:30