Ich habe eine XML-Spalte in SQL Server 2005, die das Äquivalent ist:Wie wähle ich ein Attribut der obersten Ebene einer XML-Spalte in SQL Server 2005 aus?
<Test foo="bar">
<Otherstuff baz="belch" />
</Test>
Ich möchte den Wert der foo Attribut-Test erhalten können (das Wurzelelement) als varchar. Mein Ziel wäre etwas entlang der Linien der folgenden sein:
select cast('<Test foo="bar"><Otherstuff baz="belch" /></Test>' as xml).value('@foo','varchar(20)') as Foo
Wenn ich ausführen, um die obige Abfrage ich die folgende Fehlermeldung erhalten:
Msg 2390, Level 16, State 1, Line 1 XQuery [value()]: Top-level attribute nodes are not supported
was, wenn Sie nicht wissen, was das Wurzelelement ist .. ??? In diesem Fall wissen wir, dass es "Test" ist, aber ich habe ein XML-Feld, das abhängig vom Wert in einem anderen Feld ein anderes XML hat. also könnte es oder ... gibt es einen Standard-Root-Element-Namen, den wir verwenden können .. ??? –
Ads
@Ads verwenden einen Platzhalter, z. '// Element [@foo]' oder wenn Sie etwas über die Struktur wissen ''/*/Elements/Element [@foo] ' – StuartLC
Wickeln Sie die Abfrage in Parens. Sheesh; Ich hätte es nie gedacht. Die XML-Abfrage in TSQL funktioniert großartig, aber die Syntax ist viel zu schwierig. – dudeNumber4