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 需要处理,到目前为止,我一直在使用patIndex和的组合substring来执行此操作。

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 回答