2016-10-12 12 views
2

使用它作爲子節點我有一個存儲過程命名爲如何存儲過程的結果轉換爲XML,而在另一個PROC結果

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> 

u人可以建議利用現有PROC來獲得所需要的輸出的最好方式。 謝謝你。

+0

有沒有理由使用存儲過程** **?如果這個SP只是讀取並返回一個表格,那麼最好以* inline TVF *的形式完成。在這種情況下,很容易編寫像SELECT * FROM dbo.MyFunction()FOR XML AUTO'的東西。 – Shnugo

+0

其實我上面提到的數據是虛擬數據。 從proc返回的原始數據來自多個表 ,並且有許多場景。 –

回答

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> 
+0

感謝gofr1 .. 其工作正常。 –

相關問題