SQL Server -XML 节点不返回多条记录

标签 sql sql-server xml t-sql

我正在尝试了解 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/

相关文章:

sql-server - 如何使用单个查询在 SQL Server 2008 中创建和更新 View

sql - tsql : How to retrieve the last date of each month between given date range

xml - 使用 e4X 和 Flex 3 解析 XML 时出现问题

c# - XDocument.Save() 没有标题

mysql - 使用Datastage工具读取加密数据

sql - 执行并设置 Quoted_Identifier

sql - 选择具有相同列的不同值

sql-server - SQL 具有 SUM GROUP BY

java - 如何从 Saxon 的扩展函数返回文档节点?

sql - 从 SQL 点云 x,y,z 中高效选择数据