我正在尝试了解 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)
最佳答案
你很接近
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
ID = t.n.value('@deal_id', 'int'),
FileName = f.n.value('(.)[1]','varchar(50)')
From
@XML.nodes('Deal') t(n)
Cross Apply
t.n.nodes('Deal_files/*') f(n)
返回
ID FileName
--------------
821 file1.doc
821 file2.pdf
821 file3.xcl
关于SQL Server -XML 节点不返回多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42232969/