Jestem trochę nowych do SQL i próbuję dowiedzieć się, najlepszy sposób to zrobić bez hardcoding sprawozdania aktualizacyjne w SQL Server 2012.SQL Server: rekurencyjne instrukcja aktualizacji
Zasadniczo mam hierarchiczny spis firm (myśl o łańcuchu dostaw) z kolumnami (CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj
). Każdej firmie przypisuje się korektę ceny przez rodzica, która modyfikuje cenę w tabeli PartMaster
, a ostateczna cena jest obliczana poprzez kaskadowanie korekt z rodzica na dziecko.
Jeżeli regulacja rodzice cena jest aktualizowany, chcę to do refleksji na temat wszystkich swoich spółkach dzieci i tak dalej
aka:
Podczas aktualizowania CompanyPriceAdj
dla danego updatedcompanyID
chcę rekursywnie znaleźć dziecko CompanyID
's (ParentId = updatedCompanyID
) i aktualizować swoje ParentPriceAdj
do 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
Myślałem o użyciu procedury przechowywanej, która aktualizuje się, a następnie wielokrotnie wywołuje się dla każdego dziecka, które zostało właśnie zaktualizowane, a następnie aktualizuje swoje dzieci ... aż firma nie ma dzieci
Próbowałem rozglądać się po okolicy. t znaleźć żadnych przykładów jak ten
to co mam teraz
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
niesamowite !! to działa idealnie. Dziękuję Ci! – markymark