XML query() works, value() requires singleton found xdt:untypedAtomic

前端 未结 3 1632
轻奢々
轻奢々 2020-12-16 09:40

I have a typed xml document stored as text. So I use CONVERT the data type to xml by using a Common Table Expression in order to be able to use XML methods:

         


        
相关标签:
3条回答
  • 2020-12-16 10:18

    For those interested in performance I ran a query to compare these approaches and the first option with "() and add a [1]" was MUCH faster than ".query('strFranchise').value('.',...)".

    Difference in Execution plan was 15% to 85% when running one after the other on same data. So ()[1] is over 5 times faster! Execution plan is much different.

    0 讨论(0)
  • 2020-12-16 10:30

    I believe this might also do:

    SELECT 
       x.requestpayload.query('declare namespace s="http://blah.ca/api";
                               /s:validate-student-request/s:student-id').value('.', 'int') 
      as studentid
    FROM xoutput x
    
    0 讨论(0)
  • 2020-12-16 10:31

    You need to use this:

    SELECT 
            x.requestpayload.value('declare namespace s="http://blah.ca/api";
                (/s:validate-student-request/s:student-id)[1]', 'int') 
        AS
            studentid
        FROM 
            xoutput x

    You need to put your XPath in ( ... ) and add a [1] to simply select the first value of that sequence.

    0 讨论(0)
提交回复
热议问题