SQL Server : rekursive update-Anweisung

Ich bin etwas neu auf SQL, und ich versuche herauszufinden, der beste Weg, dies zu tun, ohne hardcoding update-Anweisungen in SQL Server 2012.

Grundsätzlich habe ich eine hierarchische Tabelle der Unternehmen (denken Sie an eine supply chain) mit Spalten (CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj). Jedes Unternehmen zugewiesen bekommt, eine Preisanpassung durch Ihre Eltern, die änderung einer Liste mit Preis in PartMaster Tisch-und Endpreis wird berechnet durch Kaskadierung der Einstellungen von Eltern auf das Kind.

Wenn ein Eltern Preisanpassung aktualisiert wird, möchte ich, dass zu reflektieren, auf alle seine Kind Unternehmen und so weiter

aka:

Beim Update CompanyPriceAdj für einen bestimmten updatedcompanyID will ich rekursiv alle finden das Kind CompanyID's (ParentId = updatedCompanyID) und aktualisieren Sie Ihre ParentPriceAdj zu ParentCompany's (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

Dachte ich an die Verwendung einer gespeicherten Prozedur, die updates dann wiederholt sich für jedes Kind, das wurde gerade aktualisiert und anschließend aktualisiert seinen Kindern.... bis die Gesellschaft hat keine Kinder

Habe ich habe versucht, um konnte keine Beispiele wie diese

Dies ist, was ich jetzt haben

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
InformationsquelleAutor markymark | 2013-07-08
Schreibe einen Kommentar