【发布时间】:2011-08-05 12:39:50
【问题描述】:
大家好,我是 SSIS 的新手,我想读取特定文件夹中的一堆 xml 文件。我想读取 xml 文件并将数据输出到数据库表中。但是我有点困惑从哪里开始。有人能指出我正确的方向吗?我在互联网上进行了搜索,但所有教程似乎都涵盖了循环遍历 txt 文件而不是 xml 文件。如果这有什么不同,我将使用 sql server 2005。
非常感谢:)
【问题讨论】:
标签: sql-server-2005 ssis
大家好,我是 SSIS 的新手,我想读取特定文件夹中的一堆 xml 文件。我想读取 xml 文件并将数据输出到数据库表中。但是我有点困惑从哪里开始。有人能指出我正确的方向吗?我在互联网上进行了搜索,但所有教程似乎都涵盖了循环遍历 txt 文件而不是 xml 文件。如果这有什么不同,我将使用 sql server 2005。
非常感谢:)
【问题讨论】:
标签: sql-server-2005 ssis
这是一个可能的选项,它演示了如何将具有相同定义的多个 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。Data Flow Task 导航到Data Flow 选项卡。放置一个XML Source 组件和一个OLE DB Destination,如屏幕截图#6所示。XML Source。 XML 文件路径将从变量 FilePath 中检索。此变量将由Foreach Loop container 填充。 注意:在更高版本的 Visual Studio 中,由于 ValidateExternalMetadata 属性,XML Source 会出错。要解决此问题,请单击“XML 源”,然后单击“属性”并将 ValidateExternalMetadata 设置为 False。OLE DB Destination。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:
【讨论】: