Я использую SSIS в Visual Studio 2008. У меня есть много XML файлов, которые мне нужно обработать и разместить в существующей структуре базы данных (SQL Server 2005). Это моя первая попытка использовать SSIS, и я немного застрял. Я нашел задачу XML Data Flow, присвоил ей тестовый XML файл и связанный с ним XSD и сопоставил один node с таблицей базы данных. Мой вопрос: как мне связать множество узлов xsd со многими таблицами? Конечно, мне не нужно настраивать источник XML для каждой таблицы?
Как загрузить XML файл в базу данных с помощью пакета SSIS?
Ответ 1
Вот возможная опция, которая демонстрирует, как загружать несколько XML файлов, имеющих такое же определение, в таблицу SQL Server. В примере используются SQL Server 2008 R2 и SSIS 2008 R2. Пример, показанный здесь, загружает три файла XML в таблицу SQL, используя SSIS Data Flow Task с помощью компонента XML Source.
Шаг за шагом:
- Создайте таблицу с именем
dbo.Itemsс помощью script в разделе SQL Scripts. - Создайте файл XSD с именем
Items.xsdв папке C:\temp\xsd, используя содержимое, указанное в разделе XSD File. - Создайте три файла XML, а именно
Items_1.xml,Items_2.xmlиItems_3.xmlв пути к папке C:\temp\xml, используя содержимое, представленное в XML файлах раздел. - В пакете создайте 3 переменные, а именно
FileExtension,FilePathиFolderPath, как показано на снимке экрана 1. - В диспетчере соединений пакета создайте соединение OLE DB с именем
SQLServer, чтобы подключиться к экземпляру 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. Путь файла XML будет извлечен из переменной FilePath. Эта переменная будет заполненаForeach loop container. - Настройте
OLE DB Destination, как показано на скриншотах # 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>
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:
<Т411 >
Снимок экрана № 13:

Снимок экрана № 14:

Ответ 2
Вам также нужно добавить @[user::FilePath] в [XML Source].[XMLData] в задаче потока данных или пакет сообщает исходный файл после выполнения пакета.