难以用 SQL 服务器 TSQL 解析 XML

Difficulty parsing XML with SQL Server TSQL

我在将某些 XML 解析为我需要的 table 格式时遇到了一些困难。这是 xml 我将收到

的示例
<p>8abbdcf1-eff2-4b26-b905-343298338954</p>
<d>
    <id>172fcf08-79d6-467a-a40e-362583683680</id>
    <id>2149987c-1311-4ad0-b8bb-362477435274</id>
</d>

"p" 中始终有 1 个元素,"d" 中可以有任意数量的 ID。

我希望将结果应用 "p" 到 "d" 中的每个 ID。我环顾四周并试图了解 xml 解析的工作方式,但遇到了一些困难。我的结果通常是具有单个 ID 的 1 条记录或 2 条记录("d" 中的元素数),但返回的值为空。由于我还没有设法获得 ID 列表,所以我还没有继续对此应用 P。

以下是我最近的努力:

SET @InputXML = 
    '
    <p>8abbdcf1-eff2-4b26-b905-343298338954</p>
    <d>
        <id>172fcf08-79d6-467a-a40e-362583683680</id>
        <id>2149987c-1311-4ad0-b8bb-362477435274</id>
    </d>
    '
SELECT list.d.value('id[1]','nvarchar(100)') AS ID
FROM @InputXML.nodes('/d') AS list(d)

希望的结果是:

p                                     |ID
8abbdcf1-eff2-4b26-b905-343298338954  |172fcf08-79d6-467a-a40e-362583683680
8abbdcf1-eff2-4b26-b905-343298338954  |2149987c-1311-4ad0-b8bb-362477435274

您需要将 /id 添加到您的节点函数以便为每个 id 获取一个新行,然后您可以使用 .value('.','nvarchar(100)') 获取每个 id 的内部文本节点。这似乎按预期工作:

DECLARE @InputXML XML = 
    '<p>8abbdcf1-eff2-4b26-b905-343298338954</p>
    <d>
        <id>172fcf08-79d6-467a-a40e-362583683680</id>
        <id>2149987c-1311-4ad0-b8bb-362477435274</id>
    </d>';

SELECT  p = @InputXML.value('p[1]', 'nvarchar(100)'),
        id = list.d.value('.','nvarchar(100)')
FROM    @InputXML.nodes('d/id') AS list(d);