在 T-SQL 中加入来自 XML 的数据

Posted

技术标签:

【中文标题】在 T-SQL 中加入来自 XML 的数据【英文标题】:Join on data from XML in T-SQL 【发布时间】:2012-05-16 22:02:18 【问题描述】:

我有以下 XML 消息:

DECLARE @XML AS XML
SET @XML = 
'<Message>
<Changes>
    <Deleted>
        <ROW id="1" name="Nicole" surname="Bartlett" city="denver" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" />
        <ROW id="1" name="Nicole" surname="Bartlett" city="boston" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" />
    </Deleted>
    <Inserted>
        <ROW id="1" name="Nicole" surname="Bartlett" city="denver" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" />
        <ROW id="1" name="Nicole" surname="Bartlett" city="boston" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" />
    </Inserted>
</Changes>
</Message>'

我需要从此消息中选择数据并在 id 字段上加入另一个表。以下代码不起作用:

SELECT T.c.value('./@id', 'int') as id, t.c.value('./@name', 'varchar(max)') as name 
FROM @XML.nodes('/Message/Changes/Deleted/ROW') T(c)
inner join other_table tbl
    on tbl.id = id

我该怎么做?

【问题讨论】:

【参考方案1】:
SELECT T.c.value('./@id', 'int') as id, t.c.value('./@name', 'varchar(max)') as name 
FROM @XML.nodes('/Message/Changes/Deleted/ROW') T(c)
inner join other_table tbl
    on tbl.id = T.c.value('./@id', 'int')

【讨论】:

以上是关于在 T-SQL 中加入来自 XML 的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中加入来自两个 Firestore 集合的数据?

如何在 R 中加入来自 2 个不同 csv 文件的数据?

努力从 XML 数据中提取值 (T-SQL)

在 Pandas 中加入一个数据集和 OneHotEncoder 的结果

有没有办法限制在 spark sql 中加入表时读取的数据?

在 Jinja2 If/elif 语句中加入字典元素