我需要将其中一行转换为具有特定格式的xml,如下所示:
<root>
<TableID>101</TableID>
<TableName>Teacher</TableName>
<Objects>
<Object>
<id>1</id>
<name>X</name>
<value>abc</value>
<DataType>Int</DataType>
</Object>
<Object>
<id>2</id>
<name>Y</name>
<value>def</value>
<DataType>char</DataType>
</Object>
</Objects>
</root>
我的尝试如下,主要是我有如何创建(对象)节点的问题:
DECLARE @TableID int = 1,
@TableName NVARCHAR(200)
SELECT @TableID TableID ,
@TableName TableName ,
( SELECT '1' "id" ,
'x' "name" ,
abc "value" ,
'DataType' "DataType"
FOR
XML PATH('Object') ,
TYPE
)
FROM Teacher AS T1
FOR XML PATH('root') ,
TYPE
答案 0 :(得分:1)
你的问题很不清楚......但我的魔法水晶球告诉我你尝试过这样的事情:
此代码完全硬编码并完全生成所需的结果。但这很可能不是,你在寻找什么(将记录转换为特殊的xml对象):
DECLARE @TableID INT = 1,
@TableName NVARCHAR(200)='Teacher';
SELECT @TableID TableID ,
@TableName TableName ,
(
SELECT u.*
FROM
(
SELECT '1' "id" ,
'x' "name" ,
'abc' "value" ,
'DataType' "DataType"
UNION ALL
SELECT '2' "id" ,
'Y' "name" ,
'def' "value" ,
'char' "DataType"
) AS u
FOR XML PATH('Object'),ROOT('Objects') ,TYPE
)
FOR XML PATH('root') ,TYPE;
从我的标题中我得知,数据来自一张桌子。要模拟测试场景,我使用声明的表变量并将其填入您的数据。
下次你在这里问一个问题时,这个部分应该由你来完成。您获得良好答案的机会大大增加:How to ask a good SQL question和How to create a MCVE
DECLARE @TableID INT = 1,
@TableName NVARCHAR(200)='Teacher';
DECLARE @Teacher TABLE(id INT IDENTITY,name VARCHAR(100),value VARCHAR(100),DataType VARCHAR(100));
INSERT INTO @Teacher VALUES ('x','abc','DataType')
,('Y','def','char');
SELECT @TableID TableID ,
@TableName TableName ,
(
SELECT t.*
FROM @Teacher AS t
FOR XML PATH('Object'),ROOT('Objects') ,TYPE
)
FOR XML PATH('root') ,TYPE;
两者都有相同的结果
<root>
<TableID>1</TableID>
<TableName>Teacher</TableName>
<Objects>
<Object>
<id>1</id>
<name>x</name>
<value>abc</value>
<DataType>DataType</DataType>
</Object>
<Object>
<id>2</id>
<name>Y</name>
<value>def</value>
<DataType>char</DataType>
</Object>
</Objects>
</root>