如何使用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源吗?
I am using SSIS in Visual Studio 2008. I have many XML files that I need to process and place into an existing DB structure (SQL Server 2005). This is my first attempt at using SSIS and am a little stuck. I have found the XML Data Flow task, assigned it a test xml file and it's associated XSD, and mapped one node to a Database Table. My question is, how do I associate many xsd nodes with many tables? Surely I don't have to set up an XML source for each table?
推荐答案
下面是一个可能的示例,它演示了如何将具有相同定义的多个XML文件加载到SQL Server表中。该示例使用 SQL Server 2008 R2
和 SSIS 2008 R2
。此处显示的示例在 XML Source
组件的帮助下,使用SSIS 数据流任务
将三个XML文件加载到SQL表中。
Here is a possible option which demonstrates how to load multiple XML files having same definition into an SQL Server table. The example uses SQL Server 2008 R2
and SSIS 2008 R2
. The example shown here loads three XML files into an SQL table using SSIS Data Flow Task
with the help of XML Source
component.
分步过程:
- 使用 SQL脚本部分中给出的脚本创建名为
dbo.Items
的表。 - 创建一个使用 XSD文件下提供的内容在文件夹路径 C:\temp\xsd 中名为
Items.xsd
的XSD文件。 strong>部分。 - 创建三个XML文件,即
Items_1.xml
,Items_2.xml $ c文件夹路径 C:\temp\xml 中的$ c>和
Items_3.xml
,使用 XML文件部分。 - 在程序包上,创建3个变量,即
FileExtension
,FilePath
和FolderPath
,如屏幕快照# 1 中所示。 - 在程序包的连接管理器上,创建名为
SQLServer
的OLE DB连接以连接到SQL Server实例,如屏幕快照# 2 中所示。 - 在
控制流
选项卡上,放置一个Foreach循环容器
和一个数据流如截图# 3 所示,在Foreach循环容器中执行任务
。 - 配置
Foreach循环容器
,如屏幕快照# 4 和# 5 中所示。 - 双击
数据流任务
导航到数据流
标签。放置一个XML Source
组件和一个OLE DB目标
,如屏幕快照# 6 所示。 - 配置
XML源
,如屏幕快照# 7 和# 8 。 XML文件路径将从变量 FilePath 中检索。此变量将由Foreach循环容器
填充。 - 配置
OLE DB目标
,如屏幕快照# 9 和# 10 中所示。 - 屏幕快照# 11 和# 12 显示程序包执行。
- 屏幕截图# 13 显示程序包执行前 的表数据。屏幕截图# 14 显示了包执行后 后的表数据。现在,表
dbo.Items
中的数据包含三个XML文件中的数据。
- Create a table named
dbo.Items
using the script given under SQL Scripts section. - Create an XSD file named
Items.xsd
in the folder path C:\temp\xsd using the content provided under XSD File section. - Create three XML files namely
Items_1.xml
,Items_2.xml
andItems_3.xml
in the folder path C:\temp\xml using the content provided under XML Files section. - On the package, create 3 variables namely
FileExtension
,FilePath
andFolderPath
as shown in screenshot #1. - On the package's Connection Managers, create an OLE DB Connection named
SQLServer
to connect to the SQL Server Instance as shown in screenshot #2. - On the
Control Flow
tab, place aForeach loop container
and aData Flow Task
within the Foreach loop container as shown in screenshot #3. - Configure the
Foreach Loop container
as shown in screenshots #4 and #5. - Double-click on the
Data Flow Task
to navigate to theData Flow
tab. Place anXML Source
component and anOLE DB Destination
as shown in screenshot #6. - Configure the
XML Source
as shown in screenshot #7 and #8. The XML file path will be retrieved from the variable FilePath. This variable will be populated by theForeach Loop container
. - Configure the
OLE DB Destination
as shown in screenshots #9 and #10. - Screenshots #11 and #12 show the package execution.
- Screenshot #13 shows the table data before the package execution. Screenshot #14 shows the table data after the package execution. The data in the table
dbo.Items
now contains the data present in three XML files.
希望有帮助。
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:
屏幕截图2:
截屏#3:
截屏#4:
屏幕截图5:
屏幕截图6:
截屏7:
截屏#8:
截屏#9:
截屏#10:
截屏#11:
截屏#12:
截屏#13:
截屏#14:
这篇关于如何使用SSIS包将XML文件加载到数据库中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!