मैं कुछ एसक्यूएल के लिए नया हूँ और मैं एसक्यूएल सर्वर में अद्यतन बयान हार्डकोड बिना ऐसा करने का सबसे अच्छा तरीका है यह पता लगाने की 2012एसक्यूएल सर्वर: पुनरावर्ती अद्यतन बयान
मूल रूप से मैं कंपनियों के एक श्रेणीबद्ध तालिका है कोशिश कर रहा हूँ (आपूर्ति श्रृंखला के बारे में सोचें) कॉलम के साथ (CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj
)। प्रत्येक कंपनी को अपने माता-पिता द्वारा मूल्य समायोजन सौंपा जाता है जो PartMaster
तालिका में एक सूची मूल्य को संशोधित करता है और अंतिम मूल्य को माता-पिता से बच्चे के समायोजन को कैस्केड करके गणना की जाती है।
एक दिया updatedcompanyID
के लिए एक CompanyPriceAdj
अपडेट करते समय, मैं रिकर्सिवली लगाना चाहते हैं:
एक माता-पिता मूल्य समायोजन अद्यतन हो जाता है, तो मुझे लगता है कि अपने बच्चे कंपनियों के सभी पर चिंतन करने और इसके आगे
उर्फ चाहते बच्चे 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
भयानक !! यह पूरी तरह से काम करता है। धन्यवाद! – markymark