将'xml'导入Sql Server

pug*_*ugu 31 xml sql-server

我有一个结构如下的文件:

<?xml version="1.0" encoding="UTF-8"?>
<EventSchedule>
    <Event Uid="2" Type="Main Event">
        <IsFixed>True</IsFixed>
        <EventKind>MainEvent</EventKind>
        <Fields>
            <Parameter Name="Type" Value="TV_Show"/>
            <Parameter Name="Name" Value="The Muppets"/>
            <Parameter Name="Duration" Value="00:30:00"/>
        </Fields>
    </Event>
    <Event>
    ...and so on
    </Event>
</EventSchedule>
Run Code Online (Sandbox Code Playgroud)

我不完全确定它是否是有效的XML,但我需要将其导入SQL Server,但我尝试的所有内容似乎都不起作用.

请问是否有人可以通过一些示例代码或建议使用哪种方法指向正确的方向?

理想情况下,我希望将原始数据放入平台,方法如下:

Name        | Type    | Duration | EventKind

The Muppets | TV_Show | 00:30:00 | MainEvent
Run Code Online (Sandbox Code Playgroud)

最后这来自相当大的文件,我需要定期导入.

非常感谢,pugu

mar*_*c_s 57

试试这个:

DECLARE @XML XML = '<EventSchedule>
    <Event Uid="2" Type="Main Event">
        <IsFixed>True</IsFixed>
        <EventKind>MainEvent</EventKind>
        <Fields>
            <Parameter Name="Type" Value="TV_Show"/>
            <Parameter Name="Name" Value="The Muppets"/>
            <Parameter Name="Duration" Value="00:30:00"/>
        </Fields>
    </Event>
    <Event Uid="3" Type="Secondary Event">
        <IsFixed>True</IsFixed>
        <EventKind>SecondaryEvent</EventKind>
        <Fields>
            <Parameter Name="Type" Value="TV_Show"/>
            <Parameter Name="Name" Value="The Muppets II"/>
            <Parameter Name="Duration" Value="00:30:00"/>
        </Fields>
    </Event>
</EventSchedule>'

SELECT
    EventUID = Events.value('@Uid', 'int'),
    EventType = Events.value('@Type', 'varchar(20)'),
    EventIsFixed =Events.value('(IsFixed)[1]', 'varchar(20)'),
    EventKind =Events.value('(EventKind)[1]', 'varchar(20)')
FROM
 @XML.nodes('/EventSchedule/Event') AS XTbl(Events)
Run Code Online (Sandbox Code Playgroud)

给我一个输出:

在此输入图像描述

当然,你可以很容易地做到

INSERT INTO dbo.YourTable(EventUID, EventType, EventIsFixed, EventKind)
   SELECT 
         ......
Run Code Online (Sandbox Code Playgroud)

将该数据插入关系表.

更新:假设您在文件中包含XML - 您可以使用此代码将XML文件加载到XMLSQL Server中的变量中:

DECLARE @XmlFile XML

SELECT @XmlFile = BulkColumn
FROM  OPENROWSET(BULK 'path-to-your-XML-file', SINGLE_BLOB) x;
Run Code Online (Sandbox Code Playgroud)

然后使用上面的代码片段来解析XML.

更新#2:如果您还需要参数 - 请使用此XQuery语句:

SELECT
    EventUID = Events.value('@Uid', 'int'),
    EventType = Events.value('@Type', 'varchar(20)'),
    EventIsFixed = Events.value('(IsFixed)[1]', 'varchar(20)'),
    EventKind = Events.value('(EventKind)[1]', 'varchar(20)'),
    ParameterType = Events.value('(Fields/Parameter[@Name="Type"]/@Value)[1]', 'varchar(20)'),
    ParameterName = Events.value('(Fields/Parameter[@Name="Name"]/@Value)[1]', 'varchar(20)'),
    ParameterDuration = Events.value('(Fields/Parameter[@Name="Duration"]/@Value)[1]', 'varchar(20)')
FROM
    @XML.nodes('/EventSchedule/Event') AS XTbl(Events)
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述