将XML中的数据放入SQL Server数据库

时间:2013-06-25 06:17:23

标签: xml sql-server-2012

我需要将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。

任何启动指针都会很有用。

1 个答案:

答案 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:

http://sqlfiddle.com/#!6/d41d8/8428/0