如何在SQL存储过程中使用XPATH获得以下输出

如何在SQL存储过程中使用XPATH获得以下输出,sql,xpath,Sql,Xpath,假设xml输入为 <Tasks> <Task Name="Add2"> <Dependency Name="S1"/> </Task> <Task Name="Min2"> <Dependency Name="Dev1"/> <Dependency Name="Extra"/> </Task> <Tasks> 如何在Sql存储过程中使用Xpath实现这一点从技术上

假设xml输入为

<Tasks>
 <Task Name="Add2">
   <Dependency Name="S1"/>
 </Task>
 <Task Name="Min2">
  <Dependency Name="Dev1"/>
  <Dependency Name="Extra"/>
  </Task>
<Tasks>

如何在Sql存储过程中使用Xpath实现这一点从技术上讲,您需要使用Xpath进行两次路径选择,因为您正在访问不同的节点。我将为您介绍sql server方法:

declare @xml_content xml = '<Tasks>
 <Task Name="Add2">
   <Dependency Name="S1"/>
 </Task>
 <Task Name="Min2">
  <Dependency Name="Dev1"/>
  <Dependency Name="Extra"/>
  </Task>
<Tasks>'

with roots as (
select x.value('@Name','varchar(max)') task_name,x.query('.') deps
from @xml_content.nodes('Tasks/Task') a(x)
)

select r.task_name,x.value('@Name','varchar(max)') dependency_name
from roots r
cross apply roots.deps.nodes('/Task/Dependency') a(x)

您以前的一些问题是关于SQL Server的,所以

declare @xml xml = '
<Tasks>
 <Task Name="Add2">
   <Dependency Name="S1"/>
 </Task>
 <Task Name="Min2">
  <Dependency Name="Dev1"/>
  <Dependency Name="Extra"/>
  </Task>
</Tasks>'


select T1.N.value('@Name', 'varchar(max)') as TaskName,
       T2.N.value('@Name', 'varchar(max)') as DependencyName
from @xml.nodes('/Tasks/Task') as T1(N)
  cross apply T1.N.nodes('Dependency') as T2(N)

您使用的是什么数据库管理系统?
declare @xml xml = '
<Tasks>
 <Task Name="Add2">
   <Dependency Name="S1"/>
 </Task>
 <Task Name="Min2">
  <Dependency Name="Dev1"/>
  <Dependency Name="Extra"/>
  </Task>
</Tasks>'


select T1.N.value('@Name', 'varchar(max)') as TaskName,
       T2.N.value('@Name', 'varchar(max)') as DependencyName
from @xml.nodes('/Tasks/Task') as T1(N)
  cross apply T1.N.nodes('Dependency') as T2(N)