我对 SQL 有点陌生,我正在尝试找出最好的方法,而无需在 SQL Server 2012 中对更新语句进行硬编码。
基本上,我有一个包含列 ( ) 的公司分层表(想想供应链CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj
)。每家公司都由其父级分配一个价格调整,该调整会修改表中的标价PartMaster
,最终价格是通过从父级到子级的级联调整来计算的。
如果父母的价格调整得到更新,我希望这反映在他所有的子公司等等
又名:
CompanyPriceAdj
为给定更新 a 时updatedcompanyID
,我想递归地找到孩子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
我正在考虑使用一个更新的存储过程,然后为每个刚刚更新的孩子重复调用自己,然后更新他的孩子....直到公司没有孩子
我试过环顾四周找不到任何这样的例子
这就是我现在所拥有的
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