私はSQLに少し慣れていないので、SQL Server 2012で更新ステートメントをハードコーディングせずにこれを行う最良の方法を見つけようとしています.
基本的に、列 ( ) を持つ企業 (サプライ チェーンを考えてください) の階層テーブルがありますCompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj
。各会社には、親からテーブル内の定価を変更する価格調整が割り当てられ、PartMaster
親から子に調整をカスケードすることによって最終的な価格が計算されます。
親の価格調整が更新された場合、それをすべての子会社に反映させたいなど
別名:
CompanyPriceAdj
特定の を更新するとき、子の ( )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