1

以下の XML は、通常とは異なる形になっています。SQL Server で XQuery を使用して、次の XML からフィールド名とフィールド値のすべてのペアを抽出するにはどうすればよいですか? のフィールド名を持つフィールド値を抽出することに特に興味があり1006ます。

<details>
  <fieldname>1006</fieldname>
  <fieldvalue>HSBC BANK PLC</fieldvalue>
</details>
<details>
  <fieldname>1005</fieldname>
  <fieldvalue>POOLE   LONGFLEET</fieldvalue>
</details>
<details>
  <fieldname>1059</fieldname>
  <fieldvalue>165-167 High Street</fieldvalue>
</details>
<details>
  <fieldname>1063</fieldname>
  <fieldvalue>POOLE</fieldvalue>
</details>

処理する XML が比較的多いため、これまではpatIndexsubstringを組み合わせて使用​​してきました。

4

1 に答える 1

3

これを試してみてください-

DECLARE @XML XML
SELECT @XML = '
<details>
  <fieldname>1006</fieldname>
  <fieldvalue>HSBC BANK PLC</fieldvalue>
</details>
<details>
  <fieldname>1006</fieldname>
  <fieldvalue>test2</fieldvalue>
</details>
<details>
  <fieldname>1005</fieldname>
  <fieldvalue>POOLE   LONGFLEET</fieldvalue>
</details>
<details>
  <fieldname>1059</fieldname>
  <fieldvalue>165-167 High Street</fieldvalue>
</details>
<details>
  <fieldname>1063</fieldname>
  <fieldvalue>POOLE</fieldvalue>
</details>'

SELECT 
      fieldname = t.c.value('./fieldname[1]', 'INT')
    , fieldvalue = t.c.value('./fieldvalue[1]', 'VARCHAR(100)')
FROM @XML.nodes('details') t(c)
WHERE t.c.value('./fieldname[1]', 'INT') = 1006

出力中 -

tt

アップデート:

たとえば、ノードXMLがないROOTため、パスを正しく指定するだけで済みます。

SELECT t.c.query('.')
FROM @XML.nodes('details') t(c)

ノードを行に分割するクエリ:

tt

その後、行ごとにXMLメソッドを介してデータを取得できvalueます。

t.c.value('<path>', '<datatype>')

詳細については、このトピックを参照してください。

于 2013-09-03T09:32:59.567 に答える