none
XML-Problem: value()' erfordert ein Singleton (oder eine leere Sequenz) RRS feed

  • Frage

  • declare @dilXML as xml

    set @dilXML = '<?xml version="1.0" encoding="ISO-8859-15" ?><root>

           <test>

                 <feld1>

                        <FELDID ATTR1="attr1" >2151</FELDID>

                        <FELDID ATTR1="attr1" >2152</FELDID>

                        <FELDID ATTR1="attr1" ATTR2=”attr2”>2153</FELDID>

                        <FELDID ATTR1="attr1" >2154 </FELDID>

                        <FELDID ATTR1="attr1" ATTR2=”attr2”>2155</FELDID>

                 </feld1>

                 <feld2/>

                 <feld3/>

           </test>

    </root>

    '

    select

           dl.element.value('FELDID', 'bigint')    as FELDID

    from   @dilXML.nodes('root/test/feld1') as dl(element)

    Meldung 2389, Ebene 16, Status 1, Zeile 18

    XQuery [value()]: 'value()' erfordert ein Singleton (oder eine leere Sequenz). Ein Operand vom xdt:untypedAtomic *-Typ wurde gefunden.

    Hallo Zusammen,
    bin totaler XML-Anfenger und brauche Hilfe, habe trotz intensiver Internet-Recherche keine Lösung gefunden.
    Wie lautet die Abfrage um sämtliche FELDIDs zu erhalten?

    Vielen Dank im Voraus

    Montag, 22. Oktober 2012 09:51

Antworten

  • Hallo,

    da Du auf "feld1" Level selekierst, musst Du den gewünschten FELDID Wert adressieren indem Du z.B. [1] für das erste Element anhängst. Ansonsten musst Du die XML Abfrage auf ".../feld1/FELDID" erweitern; zum Beispiel so:

    declare @dilXML as xml 
    set @dilXML = '<?xml version="1.0" encoding="ISO-8859-15" ?>
    <root>
           <test>
                 <feld1>
                        <FELDID ATTR1="attr1" >2151</FELDID>
                        <FELDID ATTR1="attr2" >2152</FELDID>
                        <FELDID ATTR1="attr3" ATTR2="attr2">2153</FELDID>
                        <FELDID ATTR1="attr4" >2154 </FELDID>
                        <FELDID ATTR1="attr5" ATTR2="attr2">2155</FELDID>
                 </feld1>
                 <feld2/>
                 <feld3/>
           </test>
    </root>'
    
    -- Als Singleton
    select dl.element.value('(//FELDID)[1]', 'bigint')    as FELDID
    from   @dilXML.nodes('root/test/feld1') as dl(element)
    
    -- Alle FeldID selektieren
    select dl.element.value('(.)[1]', 'bigint')    as FELDID
          ,dl.element.value('(@ATTR1)[1]', 'varchar(20)')    as ATTR1
    from   @dilXML.nodes('root/test/feld1/FELDID') as dl(element)


    Olaf Helper

    Blog Xing

    Montag, 22. Oktober 2012 10:15