扩展这个原始问题
我正在使用 SQL Server Express 2017
假装这是我的源表:
+-------------+---------------------------+
| ID | Name | Age | HairColor | HasCar |
+-------------+---------------------------+
| 1 | Bert | 25 | blonde | 1 |
| 2 | Agnes | 61 | white | 0 |
| 3 | Diane | 43 | brunette | 1 |
+-------------+---------------------------+
Run Code Online (Sandbox Code Playgroud)
如何得到这样的结果?
<MyRootElement>
<MyGroupingTag Group="1">
<MyTag Value="1" />
<MyTag Value="Bert" />
<MyTag Value="25" />
<MyTag Value="blonde" />
<MyTag Value="1" />
</MyGroupingTag>
<MyGroupingTag Group="2">
<MyTag Value="2" />
<MyTag Value="Agnes" />
<MyTag Value="61" />
<MyTag Value="white" />
<MyTag Value="0" />
</MyGroupingTag>
<MyGroupingTag Group="3">
<MyTag Value="3" />
<MyTag Value="Diane" />
<MyTag Value="43" />
<MyTag Value="brunette" />
<MyTag Value="1" />
</MyGroupingTag>
</MyRootElement>
Run Code Online (Sandbox Code Playgroud)
由于 MyGroupingTag 中的 Group 属性,我不能使用类似的东西
SELECT... FOR XML PATH('MyTag'), ROOT('MyGroupingTag')
Group 本身就是一个简单的行数。
您想要生成的 XML 看起来有点奇怪。您依靠元素位置来区分什么是什么值。
declare @T table
(
ID int,
Name varchar(10),
Age int,
HairColor varchar(10),
HasCar bit
);
insert into @T(ID, Name, Age, HairColor, HasCar) values
(1, 'Bert' , 25, 'blonde' , 1),
(2, 'Agnes', 61, 'white' , 0),
(3, 'Diane', 43, 'brunette', 1);
select row_number() over(order by T.ID) as '@Group',
T.ID as 'MyTag/@Value',
null,
T.Name as 'MyTag/@Value',
null,
T.Age as 'MyTag/@Value',
null,
T.HairColor as 'MyTag/@Value',
null,
T.HasCar as 'MyTag/@Value'
from @T as T
for xml path('MyGroupingTag'), root('MyRootElement');
Run Code Online (Sandbox Code Playgroud)
这可能会生成更好的 XML 版本。
select row_number() over(order by T.ID) as '@Group',
'ID' as 'MyTag/@Name',
T.ID as 'MyTag/@Value',
null,
'Name' as 'MyTag/@Name',
T.Name as 'MyTag/@Value',
null,
'Age' as 'MyTag/@Name',
T.Age as 'MyTag/@Value',
null,
'HairColor' as 'MyTag/@Name',
T.HairColor as 'MyTag/@Value',
null,
'HasCar' as 'MyTag/@Name',
T.HasCar as 'MyTag/@Value'
from @T as T
for xml path('MyGroupingTag'), root('MyRootElement');
Run Code Online (Sandbox Code Playgroud)
结果:
<MyRootElement>
<MyGroupingTag Group="1">
<MyTag Name="ID" Value="1" />
<MyTag Name="Name" Value="Bert" />
<MyTag Name="Age" Value="25" />
<MyTag Name="HairColor" Value="blonde" />
<MyTag Name="HasCar" Value="1" />
</MyGroupingTag>
<MyGroupingTag Group="2">
<MyTag Name="ID" Value="2" />
<MyTag Name="Name" Value="Agnes" />
<MyTag Name="Age" Value="61" />
<MyTag Name="HairColor" Value="white" />
<MyTag Name="HasCar" Value="0" />
</MyGroupingTag>
<MyGroupingTag Group="3">
<MyTag Name="ID" Value="3" />
<MyTag Name="Name" Value="Diane" />
<MyTag Name="Age" Value="43" />
<MyTag Name="HairColor" Value="brunette" />
<MyTag Name="HasCar" Value="1" />
</MyGroupingTag>
</MyRootElement>
Run Code Online (Sandbox Code Playgroud)
所述null
列中的列表中的列之间是有分开MyTag
成不同的元件。
归档时间: |
|
查看次数: |
67 次 |
最近记录: |