XQuery-Singleton oder warum ein einzelnes Element nicht unbedingt als solches erkannt wird

by wolfgang@gehirnwindung.de (Wolfgang) August 23, 2009 16:52

Bei der Arbeit mit dem XML-Datentyp ab SQL Server 2005 kann es zu einer Fehlermeldung kommen, die - zumindest auf den ersten Blick - ein wenig unverständlich erscheint.

Msg 2389, Level 16, State 1, Line #
XQuery [value()]: 'value()' erfordert ein Singleton (oder eine leere Sequenz). Ein Operand vom 'xdt:untypedAtomic *'-Typ wurde gefunden.

bzw.

Msg 2389, Level 16, Status 1, Line #
XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'

Dabei ist nicht die Aussage der Fehlermeldung verwirrend, sondern vielmehr die Tatsache, dass alles korrekt zu sein scheint. Dazu folgendes Beispiel:

DECLARE @test xml

SET @test = '
<test>
    <name>Wolfgang Kluge</name>
    <links>
        <link>http://gehirnwindung.de/</link>
        <link>http://klugesoftware.de/</link>
        <link>http://vbwelt.de/</link>
    </links>
</test>'


SELECT @test.value('/test/links/link[2]/text()', 'varchar(200)')

Die Meldung weißt ja bereits darauf hin. Die value()-Funktion erfordert einen einzelnen Wert oder eine leere Sequenz - also eine Abfrage, die keinen oder genau einen Wert zurückgibt. Eben das macht die Abfrage aber eigentlich bereits - sie gibt einen einzelnen Wert zurück. Deswegen scheint die Fehlermeldung nicht wirklich viel Sinn machen.

vollständigen Artikel anzeigen...

Tags: , , ,

Microsoft SQL Server

Powered by BlogEngine.NET 1.6.1.6
Theme by Mads Kristensen | Modified by Mooglegiant and me ;)