Ich habe eine Tabelle:Ist es möglich, XML in einer Spalte zu manipulieren?
create table foo (id int, reportDef xml)
Spalte reportDef
eine lange XML-Zeichenfolge enthält.
<Report>
<Criterias>
<Criteria name="Date Range">...</Criteria>
<Criteria name="Advertisers">
<Elements>
<Element name="CheckBoxOne">
<Value>0</Value>
</Element>
<Element name="ListViewAvailable">
<Value>314</Value>
<Value>57</Value>
<Value>18886</Value>
<Value>7437</Value>
</Element>
</Elements>
</Criteria>
<Criteria name="Revenue Types">...</Criteria>
</Criterias>
</Report>
Für Situationen, in denen Name des Elements Kriterien Attribut ist „Werbetreibende“ und Element Element Name des Attributs „ListViewAvailable“, möchte ich Wert Elemente entfernen, wo der Wert 57 und 18886. So, nachdem ich mit der Verarbeitung fertig bin sollte die XML wie folgt aussehen:
<Report>
<Criterias>
<Criteria name="Date Range">...</Criteria>
<Criteria name="Advertisers">
<Elements>
<Element name="CheckBoxOne">
<Value>0</Value>
</Element>
<Element name="ListViewAvailable">
<Value>314</Value>
<Value>7437</Value>
</Element>
</Elements>
</Criteria>
<Criteria name="Revenue Types">...</Criteria>
</Criterias>
</Report>
Ist dies möglich mit SQL Server, insbesondere Version 2005 zu tun? Bisher habe ich die Abfrage erhalten, um die verfügbaren Werte zu extrahieren, aber keine Ahnung, wo mit der Manipulation und dem Aktualisieren der Spalte fortgefahren werden soll.
SELECT C.value('.', 'varchar(100)'), t.id
FROM foo t
CROSS APPLY t.reportDef.nodes('
/Report/Criterias/Criteria[@name="Advertisers"]
/Elements/Element[@name="ListViewAvailable"]
/Value
') Z(C)
Kann es nicht entfernen, bevor xml zu generieren? Auf Ihrer Select-Anweisung? – McNets
@McNets Das XML ist bereits generiert und befindet sich in der Datenbank. – AngryHacker
Werfen Sie einen Blick auf Werte ersetzen https://www.mssqltips.com/sqlservertip/2738/example-of-using-xquery-to-update-xml-data-in-sql-server/ – McNets