Ich versuche, ein leeres XML-Tag in meiner Xml-Zeichenfolge auf SQL Server zu aktualisieren; Es besagt, dass die Zeile aktualisiert wird, wenn ich das folgende Skript ausführe, aber wenn ich das XML ansehe; nichts hat sich geändert:
%Vor%Das xml danach erscheint immer noch in der Datenbank
<AgencyID />
Was mache ich falsch?
Ich habe @AgencyID ohne den Text () am Ende ausprobiert und immer noch keinen Nutzen ...
Soweit ich aus eigener Erfahrung weiß, können Sie das nicht in einem Schritt tun, da das <AgencyID/>
-Element wirklich keine text()
hat - also können Sie es nicht ersetzen.
Sie müssen möglicherweise etwas wie:
verwenden %Vor% Eine Sache: Sie müssen die Operation XmlTest.modify
verwenden - nicht XmlTest.insert
, wie Sie in Ihrem Post haben. Es gibt keine Funktion .insert()
für SQL Server-XML-Spalten.
Hier ist, wie ich es gescriptet hätte, um ein XML-Feld in einer Tabelle zu aktualisieren:
%Vor%
Wenn Sie nur eine XML-Variable (und kein XML-Feld in einer Tabelle) aktualisieren möchten, würde ich diesen Ansatz verwenden.
Ich bevorzuge das, weil Sie nicht einen vorhandenen Knoten löschen oder unnötig einen hinzufügen (was ich mir vorstellen würde, ist langsamer). Sie aktualisieren es nur, wenn es absolut notwendig ist.
Zu Ihrer Information: Ein Element könnte einen Text-Wert UND andere Child-Elemente haben - dies wird von der XML-Spezifikation erlaubt.
Einige der neueren Antworten scheinen eine einfachere Lösung für dieses Problem zu bieten.
Ich habe jedoch nach einer Lösung gesucht, die auch in Fällen funktioniert, in denen der Knoten / Tag bereits einen Wert enthält. Bis jetzt ist der beste Weg, den ich gefunden habe, dies für beide Fälle zu tun, nur den Knoten zu löschen und dann einen neuen wie folgt einzufügen:
%Vor%