繁体   English   中英

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

[英]How to load an XML file into a database using an SSIS package?

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

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

分步过程:

  1. 使用SQL Scripts部分下给出的脚本创建名为dbo.Items的表。
  2. 使用XSD文件部分下提供的内容在文件夹路径C:\\ temp \\ xsd中创建名为Items.xsdXSD文件
  3. 使用XML Files部分下提供的内容在文件夹路径C:\\ temp \\ xml中创建三个XML文件,即Items_1.xmlItems_2.xmlItems_3.xml
  4. 在包上,创建3个变量,即FileExtensionFilePathFolderPath ,如屏幕截图# 1所示。
  5. 在包的连接管理器上,创建一个名为SQLServer的OLE DB连接以连接到SQL Server实例,如屏幕截图# 2所示。
  6. Control Flow选项卡上,将Foreach loop containerData 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

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>

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>

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>

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>

截图#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

您还需要将@[user::FilePath]添加到数据流任务中的[XML Source].[XMLData] ,或者包中说包裹执行后没有找到源文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM