我有點新的SQL,我試圖找出這樣做的最好辦法,而不在SQL Server硬編碼更新語句2012SQL服務器:遞歸更新語句
基本上我有公司的分級表(想象一下供應鏈)與列(CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj
)。每家公司都會獲得父母的價格調整,修改PartMaster
表中的清單價格,最終價格通過級聯調整從父母到小孩進行計算。
如果父母調價得到更新,我想,要反映他的所有孩子公司等
又名:
當更新對於給定updatedcompanyID
一個CompanyPriceAdj
,我想遞歸地找到孩子CompanyID
的(ParentId = updatedCompanyID
)和更新他們的ParentPriceAdj
到ParentCompany
的(parentPriceAdj * (1 + CompanyPriceAdj)
)
CompanyId ParentID ParentPriceAdj CompanyPriceAdj
5 6 0.96 .10
6 8 1 .20
7 6 0.96 .15
8 11 1 0
10 6 0.96 0
11 12 1 0
我正在考慮使用存儲過程更新,然後反覆調用自己爲每個剛剛更新的孩子,然後更新他的孩子....直到公司沒有孩子
我試過環顧四周couldn'找不到這樣
任何例子這是我現在所擁有的
ALTER PROCEDURE [dbo].[UpdatePricing]
@updatedCompanyID int, @PriceAdj decimal
AS
BEGIN
SET NOCOUNT ON;
WHILE (Select CompanyID From CompanyInfo Where ParentID = @updatedCompanyID) IS NOT NULL
UPDATE CompanyInfo
SET ParentPriceAdj = @PriceAdj * (1+CompanyPriceAdj),
@updatedCompanyId = CompanyID,
@PriceAdj = CompanyPriceAdj
WHERE ParentID = @updatedCompanyID
--- some method to call itself again for each (@updatedCompanyID, @PriceAdj)
END
真棒!這工作完美。謝謝! – markymark