Ben SQL'e biraz yeniyim ve ben 2012.SQL Server: özyinelemeli güncelleme bildirimi
Temelde şirketlerin hiyerarşik tablo var SQL Server güncelleme ifadeleri hardcoding olmadan bunu yapmanın en iyi yolu anlamaya çalışıyorum (tedarik zincirini düşünün) sütunlarla (CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj
). Her şirket, ebeveynleri tarafından PartMaster
tablosunda bir liste fiyatını değiştiren bir fiyat ayarlaması alır ve nihai fiyat, ebeveynlerden çocuğa ayarlamaların basamaklandırılmasıyla hesaplanır.
bir updatedcompanyID
verilen bir CompanyPriceAdj
güncellenmesi, ben yinelemeli bulmak istiyorum: Bir anne fiyat ayarlaması güncellenir Eğer
, ben o kadar ileri
aka çocuğunun şirketlerin tüm yansıtmak ve istediğiniz çocuk CompanyID
'ın (ParentId = updatedCompanyID
) ve güncelleme onların ParentPriceAdj
ParentCompany
için' ler (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
Güncellemeyi saklı tutan bir prosedürü kullanmayı düşünüyordum, sonra tekrar güncellenen her çocuk için kendini tekrar tekrar çağırıyordu ve sonradan çocuklarını güncelledi .... şirkete sahip olmayan çocuklar
Ben etrafa bakmayı denedim t Bu şu anda
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
!! Bu mükemmel çalışıyor. Teşekkür ederim! – markymark