Leeres XML-Tag in SQL Server aktualisieren

7

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 ...

    
mint 11.05.2010, 15:34
quelle

7 Antworten

10

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.

    
marc_s 11.05.2010, 15:48
quelle
10

Verwenden von SQL Server 2005

%Vor%

- Leerzeichen in leeres Element einfügen

%Vor%

- Jetzt, da wir einen text () Knoten haben, können Sie replace w / your variable

verwenden %Vor%     
imlovinit 03.05.2011 16:21
quelle
4

Es sollte so funktionieren, um Werte auf leere Elemente zu aktualisieren: -

%Vor%     
jaspreet 28.08.2011 11:19
quelle
1

Best-Practice:

  1. Aktualisieren Sie nur XML / Datensätze, die aktualisiert werden müssen.
      (d. h. Vermeiden Sie, alle Datensätze zu aktualisieren, unabhängig davon, ob die Daten unterschiedlich sind oder nicht).
  2. Aktualisieren Sie XML / Records nur einmal.
      (z. B. Lösche nicht jeden Knoten, nur um dann zurückzugehen und jeden Knoten einzufügen).
  3. Erhöhen Sie die Leistung, indem Sie eine minimale Wirkung erzielen.
      (d. h. Vermeiden Sie das Einfügen oder Löschen von Knoten, wenn ein einfacher Replace- oder Insert-Text ausreicht.
  4. Gehen Sie nicht Gefahr, andere wichtige Daten zu verlieren.
      (d. h. NIEMALS Lösche einen Knoten und riskiere den Verlust möglicher Kind-Elemente, wenn du nur den Text-Wert aktualisierst).
  5. Erstellen Sie etwas wiederverwendbares, das für jedes Szenario funktioniert.
      (d. h. die Frage fragt uns, wie man das macht, wenn Sie die Unique-ID bereits kennen.
            Entwerfen Sie jedoch Ihre Antwort so, dass mehrere Datensätze so performant wie möglich behandelt werden.)

XML-Spalte

Hier ist, wie ich es gescriptet hätte, um ein XML-Feld in einer Tabelle zu aktualisieren:

%Vor%


XML-Variable

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.

%Vor%     
MikeTeeVee 20.12.2013 00:14
quelle
0

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%     
ron 13.09.2012 21:20
quelle
0
%Vor%

sollte funktionieren

    
Rekha 21.08.2012 05:23
quelle
0

Wenn Ihre Spalte "XmlTest" eingegeben wurde (mit einer XML SCHEMA COLLECTION), werden leere Knoten mit ihren offenen und geschlossenen Tags gespeichert; Solche Knoten werden entsprechend aktualisiert - und Ihr ursprünglicher Code würde funktionieren.

Hinweis: Ссылка

    
devjc 27.03.2013 03:20
quelle

Tags und Links