rst*_*ppi 5 xml t-sql sql-server-2008 xml-parsing
这是XML:
<?xml version="1.0" encoding="UTF-16"?>
<Response>
<Offers>
<Car>
<Group>ECMR</Group>
</Car>
<Insurances>
<Optional>
<Code>BE</Code>
</Optional>
<Optional>
<Code>BF</Code>
</Optional>
<Optional>
<Code>I</Code>
</Optional>
<Optional>
<Code>LD</Code>
</Optional>
</Insurances>
</Offers>
<Offers>
<Car>
<Group>CDMR</Group>
</Car>
<Insurances>
<Optional>
<Code>BA</Code>
</Optional>
<Optional>
<Code>BG</Code>
</Optional>
<Optional>
<Code>IS</Code>
</Optional>
<Optional>
<Code>LS</Code>
</Optional>
</Insurances>
</Offers>
</Response>
Run Code Online (Sandbox Code Playgroud)
使用此XML并在SQL Server存储过程中的单个SELECT语句中,我想创建一个如下所示的结果集:
Group Codes
--------------------------
ECMR BE,BF,I,LD
CDMR BG,BA,IS,LS
Run Code Online (Sandbox Code Playgroud)
结果集中的每个记录都包含一列<Car><Group>group</Group></Car>
和另一列用于每个记录的串联<Insurances><Optional><Code>code</Code></Optional></Insurances>
.
这可能吗?
select T.N.value('(Car/Group/text())[1]', 'varchar(10)') as [Group],
(
select ','+T2.N.value('(./text())[1]', 'varchar(10)')
from T.N.nodes('Insurances/Optional/Code') as T2(N)
for xml path(''), type
).value('substring(./text()[1], 2)', 'varchar(100)') as Codes
from @XML.nodes('/Response/Offers') as T(N)
Run Code Online (Sandbox Code Playgroud)