首页 > 解决方案 > 遵循 XML 模式,重新创建 XML,从中提取数据并将其存储到 SQL 数据库中

问题描述

实际上在这里我有两个问题,但是因为它们密切相关,所以我必须在这里提出它们。我有以下 XML 模式(其中的一部分):

                <xs:element name="maaktDeelUitVan" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:choice minOccurs="1" maxOccurs="unbounded">
                            <xs:element ref="PandRef"/>
                        </xs:choice>
                    </xs:complexType>
                </xs:element>

现在,基于这个模式,我可以猜测最终的 XML 可能如下所示:

  <maaktDeelUitVan>
    <PandRef>1</PandRef>
    <PandRef>2</PandRef>
  </maaktDeelUitVan>

如果是这样,我如何创建 XPath 查询以将 PandRef 设为 2 行?

我试过这个:

SELECT
    Tab.Col.query('./PandRef').value('.', 'varchar(100)') AS heeftAlsHoofdadres
FROM   @xml.nodes('/maaktDeelUitVan') Tab(Col)

但那是返回 12,我需要 2 行,每行包含来自 PandRef 的值。也许这很简单,但我无法弄清楚。

标签: sql-serverxmltsqlxquery

解决方案


请尝试以下解决方案。

SQL

DECLARE @xml XML =
N'<maaktDeelUitVan>
    <PandRef>1</PandRef>
    <PandRef>2</PandRef>
</maaktDeelUitVan>';

SELECT c.value('(./text())[1]', 'VARCHAR(20)') AS PandRef
FROM @xml.nodes('/maaktDeelUitVan/PandRef') AS t(c);

输出

+---------+
| PandRef |
+---------+
|       1 |
|       2 |
+---------+

推荐阅读