大家好我是SSIS的新手,我想读一个特定文件夹中的一堆xml文件。我想读取xml文件并在数据库表中输出数据。但是我对从哪里开始有点困惑。有人能指出我正确的方向吗?我在互联网上进行了搜索,但所有教程似乎都涵盖了通过txt文件循环而不是xml文件。如果有任何不同,我将使用sql server 2005。
非常感谢:)
答案 0 :(得分:25)
这是一个可能的选项,演示如何将具有相同定义的多个XML文件加载到SQL Server表中。该示例使用SQL Server 2008 R2
和SSIS 2008 R2
。此处显示的示例在Data Flow Task
组件的帮助下使用SSIS XML Source
将三个XML文件加载到SQL表中。
分步流程:
dbo.Items
的表。Items.xsd
的XSD文件。Items_1.xml
,Items_2.xml
和Items_3.xml
XML文件部分。FileExtension
,FilePath
和FolderPath
,如屏幕截图# 1 所示。SQLServer
的OLE DB连接以连接到SQL Server实例,如屏幕截图# 2 所示。Control Flow
标签上,在Foreach循环容器中放置Foreach loop container
和Data Flow Task
,如屏幕截图# 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
填充。 注意:在Visual Studio的更高版本中,由于ValidateExternalMetadata属性,XML Source 将错误输出。要解决此问题,请单击“XML Source”,然后单击“属性”,并将ValidateExternalMetadata设置为 False 。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: