如何使用SSIS包将XML文件加载到数据库中?

Ben*_*Ben 16 sql-server ssis business-intelligence

我在Visual Studio 2008中使用SSIS.我需要处理许多XML文件并将其放入现有的数据库结构(SQL Server 2005).这是我第一次尝试使用SSIS而且有点卡住了.我找到了XML数据流任务,为它分配了一个测试xml文件,它与XSD相关联,并将一个节点映射到数据库表.我的问题是,如何将许多xsd节点与许多表相关联?当然,我不必为每个表设置XML源代码?

小智 44

这是一个可能的选项,演示如何将具有相同定义的多个XML文件加载到SQL Server表中.该示例使用SQL Server 2008 R2SSIS 2008 R2.此处显示的示例在组件Data Flow Task的帮助下使用SSIS将三个XML文件加载到SQL表中XML Source.

分步过程:

  1. dbo.Items使用SQL Scripts部分下给出的脚本创建一个名为的表.
  2. 使用XSD文件部分下提供的内容创建Items.xsd 在文件夹路径C:\ temp\xsd中命名的XSD文件.
  3. 使用XML Files部分下提供的内容创建三个XML文件Items_1.xml,Items_2.xmlItems_3.xml在文件夹路径C:\ temp\xml中创建.
  4. 在封装中,创建3个变量即FileExtension,FilePathFolderPath如图截图#1.
  5. 在包的连接管理器上,创建一个名为SQLServer连接到SQL Server实例的OLE DB连接,如屏幕截图#2所示.
  6. Control Flow选项卡上,将a Foreach loop container和a Data Flow Task放在Foreach循环容器中,如屏幕截图#3所示.
  7. 配置Foreach Loop container如屏幕截图#4和#5所示.
  8. 双击Data Flow Task以导航到Data Flow选项卡.放置一个XML Source组件,OLE DB Destination如屏幕截图#6所示.
  9. 配置XML Source如屏幕截图#7和#8所示.将从变量FilePath中检索XML文件路径.该变量将由Foreach Loop container.填充.
  10. 配置OLE DB Destination如屏幕截图#9和#10所示.
  11. 屏幕截图#11和#12显示了包执行.
  12. 屏幕截图#13显示了包执行之前的表数据.屏幕截图#14显示了包执行的表数据.表dbo.Items中的数据现在包含三个XML文件中的数据.

希望有所帮助.

SQL脚本:

CREATE TABLE [dbo].[Items](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemNumber] [nvarchar](50) NOT NULL,
    [ItemName] [nvarchar](60) NOT NULL,
    [Price] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

XSD文件

<xsd:schema xmlns:schema="ItemsXSDSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="ItemsXSDSchema" elementFormDefault="qualified">
    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
    <xsd:element name="Items">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element minOccurs="0" maxOccurs="unbounded" name="Item">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Id" type="sqltypes:int" />
                            <xsd:element name="ItemNumber">
                                <xsd:simpleType>
                                    <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
                                        <xsd:maxLength value="20" />
                                    </xsd:restriction>
                                </xsd:simpleType>
                            </xsd:element>
                            <xsd:element name="ItemName">
                                <xsd:simpleType>
                                    <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
                                        <xsd:maxLength value="60" />
                                    </xsd:restriction>
                                </xsd:simpleType>
                            </xsd:element>
                            <xsd:element name="Price">
                                <xsd:simpleType>
                                    <xsd:restriction base="sqltypes:numeric">
                                        <xsd:totalDigits value="18" />
                                        <xsd:fractionDigits value="2" />
                                    </xsd:restriction>
                                </xsd:simpleType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

XML文件

Items_1.xml

<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">  
    <Item>
        <Id>1</Id>
        <ItemNumber>I2345343</ItemNumber>
        <ItemName>Monitor</ItemName>
        <Price>299.99</Price>
    </Item>
</Items>
Run Code Online (Sandbox Code Playgroud)

Items_2.xml

<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">  
    <Item>
        <Id>1</Id>
        <ItemNumber>J1231231</ItemNumber>
        <ItemName>Mouse</ItemName>
        <Price>29.99</Price>
    </Item>
</Items>
Run Code Online (Sandbox Code Playgroud)

Items_3.xml

<?xml version="1.0"?>
<Items xmlns="ItemsXSDSchema">  
    <Item>
        <Id>1</Id>
        <ItemNumber>K0456212</ItemNumber>
        <ItemName>Keyboard</ItemName>
        <Price>49.99</Price>
    </Item>
</Items>
Run Code Online (Sandbox Code Playgroud)

截图#1:

1

截图#2:

2

截图#3:

3

截图#4:

4

截图#5:

五

截图#6:

6

截图#7:

7

截图#8:

8

截图#9:

9

截图#10:

10

截图#11:

11

截图#12:

12

截图#13:

13

截图#14:

13