2017-03-31 1 views
2

auf SQL Server 2012 (SP1) hinzuzufügen, was ist der beste Weg, um Daten zu nehmen, die wie folgt aussehen:bester Weg, ein XML-Element um xml oder eine Zeile-für-Zeile-Basis

declare @t table (
    id int, 
    data xml 
) 

insert into @t values (1, '<node/>'), (2, '<node/>') 

id data 
1 <node /> 
2 <node /> 

und drehen in

id data 
1 <root><node /></root> 
2 <root><node /></root> 

?

Gibt es einen Weg, der effizienter ist, als nur in Zeichendaten umzuwandeln, den Knoten Start- und End-Tag hinzuzufügen und ihn dann wieder in XML umzuwandeln? Ich beschäftige mich mit diesem Problem bei größeren Datensätzen, daher ist dies nur ein einfaches Beispiel.

Antwort

3

Sie können einfache XQuery verwenden, um <root> Parent in Ihrem Abfrageergebnis hinzuzufügen. Kein Hin und her Konvertierung zwischen XML und VARCHAR Datentypen beteiligt: ​​

SELECT id, data.query('<root>{.}</root>') AS data 
FROM @t 

Schnelltest: http://rextester.com/RLZ30365

Kurzerklärung:

  • {}: zeigt an, dass Texte in zwischen sollte als XQuery-Ausdruck anstelle von Literalen behandelt werden
  • .: Bezugnahme auf die aktuellen Kontextknoten, die in diesem Fall <node />
4

Ein weiterer Ansatz ist (aber meine Lieblingsantwort wurde har07 der)

declare @t table (
    id int, 
    data xml 
) 

insert into @t values (1, '<node/>'), (2, '<node/>'); 

SELECT id 
     ,(SELECT data AS [*] FOR XML PATH('root'),TYPE) 
FROM @t; 
+0

immer gute Möglichkeiten zu haben. Aber da du die Antwort von har07 besser magst und es ist perfekt cromulent, werde ich mitgehen. – jep

+0

@jep ja! Optionen sind großartig! (Ich musste * cromulent *, danke für das neue Wort :-D) nachsehen. Ist das nur für Simpsons-Geeks oder etwas, das man in jeder Konversation verwenden könnte? – Shnugo

+0

_Cromulent_ ist ein Wort, das jedermanns Wortschatz, Simpsons-Fan oder nicht, verkörpern kann. – jep

Verwandte Themen