我正在寻找一种有效的方法来生成按 SQL Server 2016 原始数据列分组的 XML 输出,针对特定的输出格式。
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, FirstName
VARCHAR(20), MiddleName VARCHAR(20), LastName VARCHAR(20));
INSERT @tbl (FirstName, MiddleName, LastName) VALUES
('Fred', 'A.','Smith'),
('Anna', NULL,'Polack');
-- DDL and sample data population, end
我能做到:
Declare @Try XML
set @Try =(
select('<Answer name = "FirstName">'+(select FirstName as 'value'from @tbl order by ID
for xml PATH(''), Root('repeat'), ELEMENTS XSINIL)+'</Answer>'
)
+
(select('<Answer name = "MiddleName">'+(select MiddleName as 'value'from @tbl order by ID
for xml PATH(''), Root('repeat'), ELEMENTS XSINIL) +'</Answer>'
)
+
(select('<Answer name = "LastName">'+(select LastName as 'value'from @tbl order by ID
for xml PATH(''), Root('repeat'), ELEMENTS XSINIL) +'</Answer>'
)
)
)
)
select @Try
获得:
<Answer name="FirstName">
<repeat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<value>Fred</value>
<value>Anna</value>
</repeat>
</Answer>
<Answer name="MiddleName">
<repeat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<value>A.</value>
<value xsi:nil="true" />
</repeat>
</Answer>
<Answer name="LastName">
<repeat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<value>Smith</value>
<value>Polack</value>
</repeat>
</Answer>
我可以通过转换为文本并替换 xmlns 内容来获得所需的输出,即:
<Answer name="FirstName">
<repeat>
<value>Fred</value>
<value>Anna</value>
</repeat>
</Answer>
<Answer name="MiddleName">
<repeat>
<value>A.</value>
<value xsi:nil="true" />
</repeat>
</Answer>
<Answer name="LastName">
<repeat>
<value>Smith</value>
<value>Polack</value>
</repeat>
</Answer>
但是必须有一种更有效的方法来生成此输出而无需显式查询每一列(我的实际数据集有很多列)。