![](/img/trans.png)
[英]How to Copy SSIS Package from MSDB Database to File System using ssms or ssis Package
[英]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 R2
和SSIS 2008 R2
。 此处显示的示例在XML Source
组件的帮助下使用SSIS Data Flow Task
将三个XML文件加载到SQL表中。
分步过程:
dbo.Items
的表。 Items.xsd
的XSD文件 。 Items_1.xml
, Items_2.xml
和Items_3.xml
。 FileExtension
, FilePath
和FolderPath
,如屏幕截图# 1所示。 SQLServer
的OLE DB连接以连接到SQL Server实例,如屏幕截图# 2所示。 Control Flow
选项卡上,将Foreach loop container
和Data Flow Task
放在Foreach循环容器中,如屏幕截图# 3所示。 Foreach Loop container
,如屏幕截图# 4和# 5所示 。 Data Flow Task
以导航到“ Data Flow
选项卡。 放置XML Source
组件和OLE DB Destination
,如屏幕截图# 6所示。 XML Source
,如屏幕截图# 7和# 8所示 。 将从变量FilePath中检索XML文件路径。 该变量将由Foreach Loop container
填充。 OLE DB Destination
,如屏幕截图# 9和# 10所示 。 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:
截图#2:
截图#3:
截图#4:
截图#5:
截图#6:
截图#7:
截图#8:
截图#9:
截图#10:
截图#11:
截图#12:
截图#13:
截图#14:
您还需要将@[user::FilePath]
添加到数据流任务中的[XML Source].[XMLData]
,或者包中说包裹执行后没有找到源文件 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.