0

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

需要将行部分的所有数据放入 SQL Server 表中。因为我在这里固定了表的架构,所以不需要动态创建表。需要根据表模式放置数据。

注意:XML 文件的大小可以为 25MB。

此外,任何指向开始的指针都会很有用。

4

1 回答 1

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

于 2013-09-29T23:14:37.953 回答