【发布时间】:2017-02-14 17:51:48
【问题描述】:
我试图了解 SQL、XML 节点和交叉应用,我原以为下面的代码会返回 3 行数据,但我只得到一个。我曾认为使用 Cross apply 将查询连接回自身会为我解决这个问题。
谁能告诉我我做错了什么?
提前致谢
丹
DECLARE @XML AS XML;
SELECT @XML = ('<Deal deal_id="821">
<Application_owner>me</Application_owner>
<Deal_files>
<File>file1.doc</File>
<File>file2.pdf</File>
<File>file3.xcl</File>
</Deal_files>
</Deal>
')
select
t.n.value('@deal_id', 'int') as [ID],
f.n.value('(File)[1]','varchar(50)') as [FILENAME]
from
@XML.nodes('Deal') t(n)
cross apply
t.n.nodes('Deal_files') f(n)
【问题讨论】:
-
t.n.nodes('Deal_files')只匹配一个元素,因此您只能从中获得一个 SQL 行(将包含 3 个 XML 元素/行)。
标签: sql sql-server xml tsql