如何将存储过程结果转换为xml并将其用作另一个proc结果中的子节点

时间:2016-10-12 11:31:54

标签: sql-server xml

我有一个名为

的存储过程
usp_Employee_GetInfo

此proc在执行后返回一个表。 如下所示:

Id Name DeptID
1  AAA  10

我想创建一个在执行后返回xml的新过程。 它包括上面的proc结果作为一个子节点,如下所示:

<company Name="XXX">
 <Emp>
   <Id>1</Id>
   <Name>AAA</Name>
   <DeptID>10</DeptID>
 </Emp>
</company>
<company Name="YYY">
 <Emp>
   <Id>2</Id>
   <Name>BBB</Name>
   <DeptID>20</DeptID>
 </Emp>
</company>

你们可以建议使用现有proc获得所需输出的最佳方法。 谢谢你。

1 个答案:

答案 0 :(得分:1)

您可以声明表变量。将SP结果放在此表中并创建所需的XML:

DECLARE @emp TABLE (
    Id int,
    [Name] nvarchar(max),
    DeptID int,
    company nvarchar(max)
)

INSERT INTO @emp 
EXEC usp_Employee_GetInfo

--F.e. output of SP is:
--Id    Name    DeptID  company
--1     AAA     10      XXX
--2     BBB     20      YYY 

SELECT  company as 'company/@name',
        emp.Id as 'Emp/id',
        emp.[Name] as 'Emp/Name',
        emp.DeptID as 'Emp/DeptID'
FROM @emp
FOR XML PATH('')

将输出:

<company name="XXX" />
<Emp>
  <id>1</id>
  <Name>AAA</Name>
  <DeptID>10</DeptID>
</Emp>
<company name="YYY" />
<Emp>
  <id>2</id>
  <Name>BBB</Name>
  <DeptID>20</DeptID>
</Emp>