【发布时间】:2013-07-06 03:17:02
【问题描述】:
我对 SQL 有点陌生,我正在尝试找出在 SQL Server 2012 中无需对更新语句进行硬编码的最佳方法。
基本上,我有一个带有列 (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
我正在考虑使用一个存储过程,该存储过程更新然后重复调用每个刚刚更新的孩子,然后更新他的孩子......直到公司没有孩子
我环顾四周找不到任何这样的例子
这就是我现在拥有的
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
【问题讨论】:
标签: sql sql-server recursion sql-update sql-server-2012