XQUERY - How to use the sql:variable in 'value()' function?

后端 未结 2 452
情歌与酒
情歌与酒 2020-12-19 09:10

The query below is trying to select a child node of a given Node. How do I use a variable instead of hard coding the child node such that I can pass them as parameters in a

相关标签:
2条回答
  • 2020-12-19 09:55
    declare @T table(XMLCol xml)
    insert into @T values
    ('<Root xmlns="http://tempuri.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <Elem1 type="T1">
        <DisplayName type="string" display="Display name">No this</DisplayName>
        <Name type="string" display="First name">John</Name>
        <TimeZone display="Time zone">
          <children>
            <DisplayName type="string" display="Display name">GMT Standard Time</DisplayName>
            <HiddenName type="string" display="Hidden name">GMT</HiddenName>
          </children>
        </TimeZone>
      </Elem1>
    </Root>') 
    
    declare @Node1 varchar(50)
    set @Node1 = 'TimeZone'
    
    declare @Node2 varchar(50)
    set @Node2 = 'DisplayName'
    
    select N2.Value.value('.', 'varchar(100)') as Value 
    from @T as T
      cross apply (select T.XMLCol.query('//*[local-name()=sql:variable("@Node1")]')) as N1(Value) 
      cross apply (select N1.Value.query('//*[local-name()=sql:variable("@Node2")]')) as N2(Value)
    
    0 讨论(0)
  • 2020-12-19 10:01
    declare @Node varchar(50)
    set @Node = 'TimeZone'
    declare @ChildName varchar(50)
    set @ChildName='HiddenName'
    
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org')
    select N.value('.', 'varchar(100)') as Value
    from @T as T
      cross apply T.XMLCol.nodes('//*[local-name()=sql:variable("@Node")]/children/*[local-name(.)=sql:variable("@ChildName")]') as X(N)
    
    0 讨论(0)
提交回复
热议问题