Search code examples
sql-server-2005xquery

Getting multiple records from xml column with value() in SQL Server


This SQL only returns the first Activity element. How do I select them all? If I remove the [1] in the query I get an error that "value() requires a singleton".

 DECLARE @myDoc xml
    SET @myDoc = 
    '<Root>
        <Activities>
            <Activity>This is activity one</Activity>
            <Activity>This is activity two</Activity>
            <Activity>This is activity three</Activity>
        </Activities>
    </Root>'

    SELECT @myDoc.value('(/Root/Activities/Activity)[1]', 'varchar(100)' )

Solution

  • Thanks Ed, but I found an easier version:

    SELECT T.C.value('.', 'varchar(100)') as activity
    FROM @myDoc.nodes('(/Root/Activities/Activity)') as T(C)
    

    Though from your "unnecessarily complex" example it seems worryingly simple..