Angenommen, wir haben:
%Vor% Nun möchte ich 2 XMLs basierend auf id
Attribut zusammenführen:
Endergebnis für Benutzer mit ID = 1:
%Vor%Bitte beachten Sie, dass es nicht 2 XMLs kombiniert, sondern "upsert" Operation.
Anmerkungen:
.nodes()
und .value()
functions, um zuerst XML zu analysieren, dann zusammenzufassen und zurück zu schreiben Ich suche nach XPath/XQuery
Ausdruck, der ihn in eine Anweisung zusammenfügt (keine abgeleiteten Tabellen / dynamic-sql *):
* Wenn unbedingt benötigt, könnte Dynamic SQL verwendet werden, aber ich möchte es vermeiden.
%Vor%Nachdem ich es eine Weile versucht habe, denke ich, dass das nicht möglich ist ...
Hier gibt es eine ähnliche Frage: XQuery-Attribut in einem einzigen SQL-Aktualisierungsbefehl hinzufügen oder ersetzen
Das .modify(insert Expression1 ... )
erlaubt es nicht, Daten innerhalb eines über @sql:variable()
oder sql:column()
Lesen Sie hier: Ссылка bei Expression1 - & gt; "Konstante XML oder eigenständige SQL: Spalte / SQL: Variable oder XQuery (auf die gleiche Instanz)
%Vor%Sie könnten das zweite XML als solches deklarieren:
%Vor%Aber dann haben Sie keine Chance, den Wert der ID als XQuery-Filter zu verwenden
%Vor% Und zu guter Letzt denke ich, dass es keine Möglichkeit gibt, zwei verschiedene XML_DML-Anweisungen innerhalb eines Aufrufs von .modify()
zu kombinieren.
Die einzige Idee, die ich hatte, war diese, aber es funktioniert nicht. IF scheint nur in einem Ausdruck verwendbar zu sein, aber nicht zwei unterscheiden zwischen zwei Ausführungspfaden
%Vor%Also meine Schlussfolgerung: Nein, das ist nicht möglich ...
Die Lösung, die ich hier bereitgestellt habe Ссылка im zweiten Abschnitt ("Wenn Sie zwei Bücher-Strukturen zusammenführen wollen") ") wäre mein Weg, das zu lösen.
Versuchen Sie etwas wie das, es ist leicht zu verstehen, aber es ist langwierig.
Lassen Sie es mich wissen, wenn Sie ein Problem haben.
%Vor%Tags und Links sql sql-server xml tsql xpath