在 SQL 服务器中的 FOR XML PATH 中缩进一个子类别?
Indenting a sub-category in FOR XML PATH in SQL Server?
我需要将数据从 SQL 服务器导出到 XML 文件中。我知道如何输出到文本文件,但我在 XML 格式方面遇到困难。
示例数据:
CREATE TABLE dbo.testdata (accountid varchar(100),
activeaccount bit,
text1 varchar(100),
text2 varchar(100))
INSERT INTO dbo.testdata VALUES ('T00000001',0,'Fish' ,'Blue'),
('T00000002',1,'Bread','Red' ),
('T00000003',1,'Onion','Blue')
我的XML导出码:
SELECT accountid AS '@ID',
activeaccount,
text1,
text2
FROM dbo.testdata
FOR XML PATH ('acccountid'), root ('detail')
该导出的输出:
<detail>
<acccountid ID="T00000001">
<activeaccount>0</activeaccount>
<text1>Fish</text1>
<text2>Blue</text2>
</acccountid>
<acccountid ID="T00000002">
<activeaccount>1</activeaccount>
<text1>Bread</text1>
<text2>Red</text2>
</acccountid>
<acccountid ID="T00000003">
<activeaccount>1</activeaccount>
<text1>Onion</text1>
<text2>Blue</text2>
</acccountid>
</detail>
我想要的是将“text1”和“text2”字段缩进到名为“preferences”的 accountid 子类别中,因此输出将如下所示:
<detail>
<acccountid ID="T00000001">
<activeaccount>0</activeaccount>
<preferences>
<text1>Fish</text1>
<text2>Blue</text2>
</preferences>
</acccountid>
<acccountid ID="T00000002">
<activeaccount>1</activeaccount>
<preferences>
<text1>Bread</text1>
<text2>Red</text2>
</preferences>
</acccountid>
<acccountid ID="T00000003">
<activeaccount>1</activeaccount>
<preferences>
<text1>Onion</text1>
<text2>Blue</text2>
</preferences>
</acccountid>
</detail>
这应该是显而易见的,但我在 FOR XML PATH 命令中尝试的所有操作都以错误的顺序放置了字段,根本不起作用或在我不想要的地方添加了额外的东西。快把我逼疯了。
一种方法是在列的别名中定义它:
SELECT accountid AS '@ID',
activeaccount,
text1 AS [preferences/text1],
text2 AS [preferences/text2]
FROM dbo.testdata
FOR XML PATH ('acccountid'), root ('detail');
我需要将数据从 SQL 服务器导出到 XML 文件中。我知道如何输出到文本文件,但我在 XML 格式方面遇到困难。
示例数据:
CREATE TABLE dbo.testdata (accountid varchar(100),
activeaccount bit,
text1 varchar(100),
text2 varchar(100))
INSERT INTO dbo.testdata VALUES ('T00000001',0,'Fish' ,'Blue'),
('T00000002',1,'Bread','Red' ),
('T00000003',1,'Onion','Blue')
我的XML导出码:
SELECT accountid AS '@ID',
activeaccount,
text1,
text2
FROM dbo.testdata
FOR XML PATH ('acccountid'), root ('detail')
该导出的输出:
<detail>
<acccountid ID="T00000001">
<activeaccount>0</activeaccount>
<text1>Fish</text1>
<text2>Blue</text2>
</acccountid>
<acccountid ID="T00000002">
<activeaccount>1</activeaccount>
<text1>Bread</text1>
<text2>Red</text2>
</acccountid>
<acccountid ID="T00000003">
<activeaccount>1</activeaccount>
<text1>Onion</text1>
<text2>Blue</text2>
</acccountid>
</detail>
我想要的是将“text1”和“text2”字段缩进到名为“preferences”的 accountid 子类别中,因此输出将如下所示:
<detail>
<acccountid ID="T00000001">
<activeaccount>0</activeaccount>
<preferences>
<text1>Fish</text1>
<text2>Blue</text2>
</preferences>
</acccountid>
<acccountid ID="T00000002">
<activeaccount>1</activeaccount>
<preferences>
<text1>Bread</text1>
<text2>Red</text2>
</preferences>
</acccountid>
<acccountid ID="T00000003">
<activeaccount>1</activeaccount>
<preferences>
<text1>Onion</text1>
<text2>Blue</text2>
</preferences>
</acccountid>
</detail>
这应该是显而易见的,但我在 FOR XML PATH 命令中尝试的所有操作都以错误的顺序放置了字段,根本不起作用或在我不想要的地方添加了额外的东西。快把我逼疯了。
一种方法是在列的别名中定义它:
SELECT accountid AS '@ID',
activeaccount,
text1 AS [preferences/text1],
text2 AS [preferences/text2]
FROM dbo.testdata
FOR XML PATH ('acccountid'), root ('detail');