我需要将XML中的所有数据放入SQL Server 2012数据库。
<Columns>
<TC><Name>Time</Name><DataType>System.DateTime</DataType></TC>
<TC><Name>Name</Name><DataType>System.String</DataType></TC>
<TC><Name>State</Name><DataType>System.String</DataType></TC>
<TC><Name>Message</Name><DataType>System.String</DataType></TC>
</Columns>
<Rows>
<TR>
<Fields>
<Field>2013-06-24</Field>
<Field>PrjTest</Field>
<Field>Started</Field>
<Field>application starting,no exception</Field>
</Fields>
</TR>
<TR>
<Fields>
<Field>2013-06-24</Field>
<Field>PrjTest1</Field>
<Field>Started</Field>
<Field>application starting,no exception</Field>
</Fields>
</TR>
<TR>
<Fields>
<Field>2013-06-24</Field>
<Field>PrjTest2</Field>
<Field>Completed</Field>
<Field>application starting,no exception</Field>
</Fields>
</TR>
</Rows>
<Columns>...</Columns>
部分我的表架构名称为<Name>
,类型为<DataType>
然后在行部分的<TR>
下,我获得了所有值,这些值都包含在<Field>
标记中。
需要将来自rows部分的所有数据放入SQL Server表中。因为我在这里修复了表的模式,所以不需要动态创建表。需要根据表模式放置数据。
注意:XML文件大小可以是25MB。
任何启动指针都会很有用。
答案 0 :(得分:1)
DECLARE @xmlData xml = '...'
SELECT
Tbl.Col.value('(Fields/Field)[1]', 'datetime') AS [Time],
Tbl.Col.value('(Fields/Field)[2]', 'nvarchar(max)') AS [Name],
Tbl.Col.value('(Fields/Field)[3]', 'nvarchar(max)') AS [State],
Tbl.Col.value('(Fields/Field)[4]', 'nvarchar(max)') AS [Message]
FROM @xmlData.nodes('/Rows/TR') Tbl(Col)
.nodes用于将XML数据转换为行。
SQLFiddle: