SQL从XML获取值

时间:2018-03-23 13:40:07

标签: sql sql-server xml

我想从xml获得价值。 我的代码看起来像:

   DECLARE @XML xml
set @XML = (select InXML from   ServiceBrokerQueueFault where id=29140)
select @XML

select
x.Rec.query('./nrZamowienia').value('.', 'nvarchar(2000)') AS 'NrZamowienia'
FROM @XML.nodes('/powiadomienie')as x(Rec)

我的@XML显示:

<ns2:powiadomOZdarzeniu xmlns:ns2="http://cyfrowypolsat.pl/interfejsy/umowy/zamowieniaom/v1/Zdarzenie">
  <metryka>
    <uzytkownik>om-system</uzytkownik>
    <system>OM</system>
    <data>2017-10-25T15:36:23.006</data>
    <uid>BAC27CDB-9888-46DD-BDE3-B3752852C50C</uid>
    <nazwaKwalifikowanaInterfejsuDoWywolaniaZwrotnego>{http://cyfrowypolsat.pl/service/wyrocznia/om/v1/notification}sendCallback</nazwaKwalifikowanaInterfejsuDoWywolaniaZwrotnego>
  </metryka>
  <powiadomienie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:ZapisanoDaneUmowy">
    <nrZamowienia>Z2017-528-700-701</nrZamowienia>
    <zdarzenie>ZAPISANO_DANE_UMOWY</zdarzenie>
    <dataRejestracjiZdarzenia>2017-10-25T15:36:23.006</dataRejestracjiZdarzenia>
    <dataZmianyStatusu>2017-10-25T14:37:20.857</dataZmianyStatusu>
    <typProcesuSprzedazowego>SERVICES_CHANGE</typProcesuSprzedazowego>
    <dataWejsciaWZycie>2018-03-28T00:00:00.000</dataWejsciaWZycie>
    <kanalRealizacji>APS</kanalRealizacji>
    <nrUmowy>U2017-759-557-275</nrUmowy>
  </powiadomienie>
</ns2:powiadomOZdarzeniu>

我怎样才能进入选择值?

<nrZamowienia>Z2017-528-700-701</nrZamowienia>

我也喜欢这样尝试

DECLARE @XML xml
set @XML = (select InXML from   ServiceBrokerQueueFault where id=29140)
select @XML

select
x.Rec.query('./nrZamowienia').value('.', 'nvarchar(2000)') AS 'NrZamowienia'
FROM @XML.nodes('powiadomOZdarzeniu/powiadomienie')as x(Rec)

但它不起作用。有人可以帮助我吗?我知道有一些例子,但仍然无法得到它并为我的xml写出了良好的路径。

1 个答案:

答案 0 :(得分:1)

除了命名空间之外,您的查询是正常的。一种方法是report

with xmlnamespaces

另一种方法是; with xmlnamespaces( 'http://cyfrowypolsat.pl/interfejsy/umowy/zamowieniaom/v1/Zdarzenie' as s) select x.Rec.query('nrZamowienia').value('.', 'nvarchar(2000)') AS 'NrZamowienia' from @XML.nodes('s:powiadomOZdarzeniu/powiadomienie') as x(Rec)

declare namespace