Ich bin etwas Neues zu SQL und ich versuche, die beste Art und Weise, dies zu tun, um herauszufinden, ohne Update-Anweisungen in SQL Server 2012 hartzucodierenSQL Server: rekursive Update-Anweisung
Grundsätzlich ich eine hierarchische Tabelle der Unternehmen haben (Denken Sie an eine Lieferkette) mit Spalten (CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj
). Jedem Unternehmen wird von seinem Elternteil eine Preisanpassung zugewiesen, die einen Listenpreis in der Tabelle PartMaster
ändert, und der Endpreis wird berechnet, indem die Anpassungen von Eltern zu Kind kaskadiert werden.
Wenn ein Eltern Preisanpassung aktualisiert wird, möchte ich, dass auf allen seinem Kind Unternehmen reflektieren und so weiter
aka:
Wenn ein CompanyPriceAdj
für eine updatedcompanyID
gegeben Aktualisierung, möchte ich rekursiv finden das Kind CompanyID
's (ParentId = updatedCompanyID
) und deren ParentPriceAdj
-ParentCompany
aktualisieren' 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
Ich dachte daran, eine gespeicherte Prozedur zu verwenden, die sich dann wiederholt für jedes Kind aufruft, das gerade aktualisiert wurde und anschließend seine Kinder aktualisiert hat .... bis das Unternehmen keine Kinder hat
Ich habe versucht, mich umzusehen t keine Beispiele finden, wie dies
Das ist, was ich jetzt können
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
awesome !! das funktioniert perfekt. Vielen Dank! – markymark