【问题标题】:Sql Server XQuery value() not workingSql Server XQuery 值()不工作
【发布时间】:2016-02-19 12:54:17
【问题描述】:

我已经在 XQUERY 上工作了一段时间,但不知怎的,我陷入了这个简单而奇怪的问题。

以下是我的查询:

    DECLARE @VALUE_XML XML ='<ns2:Transaction xmlns:ns2="broadridge:spsi:gloss:Transaction" xmlns="broadridge:spsi:gloss:Common" xmlns:ns3="broadridge:spsi:gloss:FinancingTransactionEvent">
      <ns2:Date>
        <Type>TDAT</Type>
        <ns2:Date>2015-02-06</ns2:Date>
      </ns2:Date>
      <ns2:Date>
        <Type>VDAT</Type>
        <ns2:Date>2015-02-06</ns2:Date>
      </ns2:Date>
      <ns2:Driver>
        <Type>CACT</Type>
        <ns2:Driver>XXXX</ns2:Driver>
      </ns2:Driver>
      <ns2:Driver>
        <Type>SUBT</Type>
        <ns2:Driver>BKST</ns2:Driver>
      </ns2:Driver>
      <ns2:Driver>
        <Type>OPER</Type>
        <ns2:Driver>DEL</ns2:Driver>
      </ns2:Driver>
      <ns2:Reference>
        <ns2:Type>CCAR</ns2:Type>
        <ns2:Reference>2015-08-12T07:39:26Z</ns2:Reference>
      </ns2:Reference>
      <ns2:Price>
        <Type>TPRC</Type>
        <ns2:Price>0.000000</ns2:Price>
        <ns2:MultiplyDivide>M</ns2:MultiplyDivide>
      </ns2:Price>
      <ns2:Party>
        <Type>COMP</Type>
        <ns2:Reference>
          <Type>AEID</Type>
          <Value>ING7</Value>
        </ns2:Reference>
      </ns2:Party>
      <ns2:Party>
        <Type>PBK</Type>
        <ns2:Reference>
          <Type>ABID</Type>
          <Value>INGBK900611</Value>
        </ns2:Reference>
      </ns2:Party>
      <ns2:Party>
        <Type>SECP</Type>
        <ns2:Reference>
          <Type>ACID</Type>
          <Value>2009453</Value>
        </ns2:Reference>
      </ns2:Party>
      <ns2:Instrument>
        <Type>UINS</Type>
        <ns2:Reference>
          <Type>APTP</Type>
          <Value>722232</Value>
        </ns2:Reference>
        <ns2:Quantity>37043</ns2:Quantity>
      </ns2:Instrument>
      <ns2:Instrument>
        <Type>GREI</Type>
        <ns2:Reference>
          <Type>ISO</Type>
          <Value>EUR</Value>
        </ns2:Reference>
        <ns2:Quantity>0.00</ns2:Quantity>
      </ns2:Instrument>
      <ns2:Instrument>
        <Type>NWHI</Type>
        <ns2:Reference>
          <Type>ISO</Type>
          <Value>EUR</Value>
        </ns2:Reference>
        <ns2:Quantity>0.00</ns2:Quantity>
      </ns2:Instrument>
      <ns2:OriginReference>SN287823109_1</ns2:OriginReference>
      <ns2:OriginVersion>3075532</ns2:OriginVersion>
    <ns2:Action>N</ns2:Action>
      <ns2:Type>BCAS</ns2:Type>
      <ns2:Origin>SOPHIS</ns2:Origin>
    </ns2:Transaction>'

select @VALUE_XML.value('declare default element namespace  "broadridge:spsi:gloss:Transaction";
(/Transaction/Date/Type)[1]', 'nvarchar(max)')

我真的无法理解为什么这个查询返回“NULL”。我期待第一个“类型”元素的值,即“TDAT”。

我真的在敲我的头。我已经使用了 value() n 次,但不明白为什么它今天不起作用。

问候, 维卡斯

【问题讨论】:

    标签: sql sql-server xquery default-namespace


    【解决方案1】:

    您的 XML 默认命名空间 URI 是 "broadridge:spsi:gloss:Common"

    select @VALUE_XML.value('
        declare default element namespace  "broadridge:spsi:gloss:Common";
        declare namespace ns2="broadridge:spsi:gloss:Transaction";
        (/ns2:Transaction/ns2:Date/Type)[1]
    ', 'nvarchar(max)')
    

    【讨论】:

    • 非常感谢。我完全错过了。但我想知道,请告诉我为什么以下查询有效:SELECT MAX(@VALUE_XML.value('declare default element namespace "broadridge:spsi:gloss:Transaction";count(/Transaction/Reference )','int'))。这令人费解
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多