2016-05-17 72 views
0

我想从SQL创建一个XML输出,它有3个嵌套语句,但在这方面的经验很少。我写的代码如下:来自SQL Server 2008的XML输出

select 
replace(replace(replace(
(
select ID as [@ID], 
(select cast(Name as int) as [@Name], 
(select num as [@Number], 
from #tbl_new_claims_export 
for xml path('Num'),root('Numbers'), type 
) 
from #tbl_new_claims_export 
for xml path('LineItem'), type 
) 
from #tbl_new_claims_export 
for XML PATH('Line'),ROOT('Lines') 
),'><','>'+char(10)+'<'),'<Num', char(9)+'<Num'), '<Num>', char(9)+'<Num>') ; 

我试图创建一个输出,看起来像这样:

<Lines> 
<Line ID ="1"> 

<LineItem Name ="Michael"/> 

<Numbers> 

<Num Number="24"</Num> 

</Numbers> 

</LineItem> 

</Line> 

的每一行,我希望看到的线,名称和号码如上所示。但是,它在每行下显示多个名称,然后重复下面的数字。任何人都可以帮我解决这个问题吗?

感谢。

+0

如果您可以发布表结构和临时表的一些示例数据,这将非常有帮助。作为发布,它非常难以提供帮助。 –

回答

0

无采样数据与1:N的例子和预期输出是在魔术玻壳阅读...

反正你指定此

SELECT 
    1 AS [Line/@ID] 
    ,'Michael' AS [LineItem/@Name] 
    ,24 AS [Numbers/Num/@Number] 
FOR XML PATH('Lines') 

会产生完全相同的输出:

<Lines> 
    <Line ID="1" /> 
    <LineItem Name="Michael" /> 
    <Numbers> 
    <Num Number="24" /> 
    </Numbers> 
</Lines> 

如果您需要进一步的帮助,请指定最小化和缩减的测试场景。最好将是一个小提琴或一些可粘贴的代码,如

DECLARE @tbl TABLE(ID INT, col1 VARCHAR(MAX)/*more columns*/); 
INSERT INTO @tbl VALUES (1,'test1')/*more values*/ 
+0

抱歉缺少信息。这实际上虽然完美,但非常感谢你! –