6

次のように、XML 列の SQL Server テーブルにいくつかの XML データがあります。

<AffordabilityResults>
      <matchlevel xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">IndividualMatch</matchlevel>
      <searchdate xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">2013-07-29T11:20:53</searchdate>
      <searchid xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">{E40603B5-B59C-4A6A-92AB-98DE83DB46E7}</searchid>
      <calculatedgrossannual xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">13503</calculatedgrossannual>
  <debtstress xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">
    <incomedebtratio>
      <totpaynetincome>0.02</totpaynetincome>
      <totamtunsecured>0.53</totamtunsecured>
      <totamtincsec>0.53</totamtincsec>
    </incomedebtratio>
  </debtstress>
</AffordabilityResults>

一部の要素には xmlns 属性があり、一部の要素にはありません...

データを返すクエリを作成する必要があります。さらに重要なことは、ビジネス アナリストに、必要なデータを取得するための独自のクエリを作成する方法を示すことです。そのため、できるだけシンプルにしたいと考えています。

次のように、WITH XMLNAMESPACES 要素を使用してデータを簡単にクエリできます。

WITH XMLNAMESPACES (N'urn:callcredit.co.uk/soap:affordabilityapi2' as x )
SELECT

    ResponseXDoc.value('(/AffordabilityResults/x:matchlevel)[1]','varchar(max)' ) AS MatchLevel
  , ResponseXDoc.value('(/AffordabilityResults/x:debtstress/x:incomedebtratio/x:totamtunsecured)[1]','nvarchar(max)' ) AS UnsecuredDebt

  FROM [NewBusiness].[dbo].[t_TacResults]

しかし、クエリに x: の部分を追加すると、クエリが非常に複雑に見えるため、ビジネス アナリストにとって単純なままにしておきたいと考えています。

追加してみました:

WITH XMLNAMESPACES (DEFAULT 'urn:callcredit.co.uk/soap:affordabilityapi2' )

XQuery から x: を削除しますが、これは null を返します (ルート要素に xmlns がないためでしょうか?)

デフォルトの名前空間の有無にかかわらず、これらのクエリを簡素化する方法はありますか?

4

1 に答える 1