SQL Server: rekursive Update-Anweisung

8

Ich bin etwas neu in SQL und ich versuche herauszufinden, die beste Möglichkeit, dies ohne Hardcoding Update-Anweisungen in SQL Server 2012 zu tun.

Grundsätzlich habe ich eine hierarchische Tabelle von Unternehmen (denken Sie an eine Lieferkette) mit Spalten ( CompanyID, ParentID, ParentPriceAdj, CompanyPriceAdj ). Jedem Unternehmen wird eine Preisanpassung von seinem Elternteil zugewiesen, die einen Listenpreis in der Tabelle PartMaster ändert, und der Endpreis wird durch Kaskadieren der Anpassungen von Eltern zu Kind berechnet.

Wenn eine Preisanpassung für Eltern aktualisiert wird, möchte ich, dass dies auf alle seine untergeordneten Unternehmen und so weiter reflektiert wird

aka:

Wenn ich eine CompanyPriceAdj für eine gegebene updatedcompanyID aktualisiere, möchte ich rekursiv die untergeordneten CompanyID 's ( ParentId = updatedCompanyID ) finden und ihre ParentPriceAdj auf ParentCompany aktualisieren ( parentPriceAdj * (1 + CompanyPriceAdj) )

%Vor%

Ich dachte daran, eine gespeicherte Prozedur zu verwenden, die sich dann wiederholt für jedes Kind aktualisiert, das gerade aktualisiert wurde und anschließend seine Kinder aktualisiert .... bis die Firma keine Kinder mehr hat

Ich habe versucht, mich umzusehen, konnte keine Beispiele wie diese finden

Das habe ich gerade jetzt

%Vor%     
markymark 08.07.2013, 17:28
quelle

3 Antworten

8

Rekursive CTE kann verwendet werden, um Hierarchie zu führen, etwa wie folgt:

%Vor%     
i-one 08.07.2013, 19:55
quelle
3

Sie können WITH-Ausdruck in t-sql verwenden, um alle übergeordneten Datensätze für einen gegebenen untergeordneten Datensatz abzurufen. Und kann jeden Datensatz in Datensatz entsprechend mit Ihrer Logik aktualisieren.

Hier sind Links für WITH-Ausdruck -

Ссылка

Ссылка

    
Hardik 08.07.2013 18:38
quelle
0

Haben Sie sich einen CURSOR angesehen? Es ist ein bisschen Overhead, aber es kann Ihnen geben, was Sie brauchen. Wenn Sie nicht vertraut sind, ist unten eine grundlegende Gliederung. Sie können jede Firmen-ID einzeln erfassen, Änderungen vornehmen und weitermachen. Sie können sie verschachteln, sie in Schleifen einbinden oder Schleifen darin einfügen, was auch immer Sie brauchen, um durch eine Liste zu gehen, die Aktionen ausführt, bis keine Aktionen mehr übrig sind, die Aufmerksamkeit benötigen.

%Vor%

Ich hoffe, das ist hilfreich. Ich entschuldige mich, wenn ich falsch verstanden habe.

    
R_Scott 08.07.2013 18:50
quelle