Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用SSIS包将XML文件加载到数据库中?_Sql Server_Ssis_Business Intelligence - Fatal编程技术网

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

Sql server 如何使用SSIS包将XML文件加载到数据库中?,sql-server,ssis,business-intelligence,Sql Server,Ssis,Business Intelligence,我正在VisualStudio2008中使用SSIS。我有许多XML文件需要处理并放入现有的数据库结构(SQLServer2005)。这是我第一次尝试使用SSIS,我有点卡住了。我找到了XML数据流任务,为它分配了一个测试XML文件及其关联的XSD,并将一个节点映射到一个数据库表。我的问题是,如何将多个xsd节点与多个表相关联?当然,我不必为每个表设置XML源?这里有一个可能的选项,演示如何将具有相同定义的多个XML文件加载到SQL Server表中。该示例使用了SQL Server 2008

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

这里有一个可能的选项,演示如何将具有相同定义的多个XML文件加载到SQL Server表中。该示例使用了
SQL Server 2008 R2
SSIS 2008 R2
。这里显示的示例在
XML源组件的帮助下,使用SSIS
Data Flow Task
将三个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
  • 使用SQL脚本部分中给出的脚本创建一个名为
    dbo.Items
    的表
  • 在文件夹路径C:\temp\XSD中,使用XSD file部分提供的内容创建一个名为
    Items.XSD
    的XSD文件
  • 在文件夹路径C:\temp\XML
  • 中,使用XML文件部分提供的内容创建三个XML文件,即
    Items\u 1.XML
    Items\u 2.XML
    Items\u 3.XML
  • 在包上,创建3个变量,即
    FileExtension
    FilePath
    FolderPath
    ,如屏幕截图#1所示
  • 在包的连接管理器上,创建名为
    SQLServer
    的OLE DB连接,以连接到SQL Server实例,如屏幕截图2
    所示
  • 控制流
    选项卡上,将
    Foreach循环容器
    数据流任务
    放置在Foreach循环容器内,如屏幕截图3所示
  • 配置
    Foreach循环容器
    ,如屏幕截图#4和#5所示
  • 双击
    数据流任务
    导航到
    数据流
    选项卡。放置
    XML源
    组件和
    oledb目标
    ,如屏幕截图所示
  • 如屏幕截图7和8所示配置
    XML源代码。XML文件路径将从变量FilePath中检索。此变量将由
    Foreach循环容器
    填充
  • 配置OLE DB目的地,如屏幕截图9和10所示
  • 屏幕截图#11和#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>
    
    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>J1231231</ItemNumber>
            <ItemName>Mouse</ItemName>
            <Price>29.99</Price>
        </Item>
    </Items>
    
    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>K0456212</ItemNumber>
            <ItemName>Keyboard</ItemName>
            <Price>49.99</Price>
        </Item>
    </Items>
    
    
    1.
    I2345343
    班长
    299.99
    
    Items_2.xml

    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>I2345343</ItemNumber>
            <ItemName>Monitor</ItemName>
            <Price>299.99</Price>
        </Item>
    </Items>
    
    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>J1231231</ItemNumber>
            <ItemName>Mouse</ItemName>
            <Price>29.99</Price>
        </Item>
    </Items>
    
    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>K0456212</ItemNumber>
            <ItemName>Keyboard</ItemName>
            <Price>49.99</Price>
        </Item>
    </Items>
    
    
    1.
    J1231231
    老鼠
    29.99
    
    Items_3.xml

    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>I2345343</ItemNumber>
            <ItemName>Monitor</ItemName>
            <Price>299.99</Price>
        </Item>
    </Items>
    
    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>J1231231</ItemNumber>
            <ItemName>Mouse</ItemName>
            <Price>29.99</Price>
        </Item>
    </Items>
    
    <?xml version="1.0"?>
    <Items xmlns="ItemsXSDSchema">  
        <Item>
            <Id>1</Id>
            <ItemNumber>K0456212</ItemNumber>
            <ItemName>Keyboard</ItemName>
            <Price>49.99</Price>
        </Item>
    </Items>
    
    
    1.
    K0456212
    键盘
    49.99
    
    屏幕截图#1:

    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
    

    截图#2:

    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
    

    屏幕截图#3:

    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
    

    屏幕截图#4:

    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
    

    屏幕截图#5:

    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
    

    屏幕截图#6:

    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
    

    截图#7:

    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
    

    截图#8:

    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
    

    截图#9:

    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
    

    截图#10:

    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
    

    截图#11:

    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
    

    截图#12:

    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
    

    截图#13:

    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
    

    屏幕截图#14:

    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
    

    您还需要将
    @[user::FilePath]
    添加到
    [XML源].[XMLData]
    在数据流任务中,或包执行后显示未找到任何源文件。

    是否所有XML文件都属于同一架构?从现在起,SSIS存在一个SSIS错误,它阻止在SSIS 2008中循环所有XML文件……但感谢您提供的解决方案。请注意xsd中的SQLTYPE。这让我的工作轻松多了!但愿我早点找到这个答案!我使用的是常规类型的模式定义,状态成功,但没有输出行。修正xsd修正了这个问题!