Ecco una possibile opzione che mostra come caricare più file XML con la stessa definizione in una tabella di SQL Server. L'esempio utilizza SQL Server 2008 R2
e SSIS 2008 R2
. L'esempio mostrato qui carica tre file XML in una tabella SQL usando SSIS Data Flow Task
con l'aiuto di XML Source
componente.
Procedura dettagliata:
- Crea una tabella denominata
dbo.Items
utilizzando lo script fornito in Script SQL sezione. - Crea un file XSD denominato
Items.xsd
nel percorso della cartella C:\temp\xsd utilizzando il contenuto fornito in File XSD sezione. - Crea tre file XML ovvero
Items_1.xml
,Items_2.xml
eItems_3.xml
nel percorso della cartella C:\temp\xml utilizzando i contenuti forniti in File XML sezione. - Sul pacchetto, crea 3 variabili ovvero
FileExtension
,FilePath
eFolderPath
come mostrato nella schermata #1 . - Nei Connection Manager del pacchetto, creare una connessione OLE DB denominata
SQLServer
per connettersi all'istanza di SQL Server come mostrato nella schermata #2 . - Sul
Control Flow
scheda, inserisci unForeach loop container
e unData Flow Task
all'interno del contenitore del ciclo Foreach, come mostrato nello screenshot n. 3 . - Configura il
Foreach Loop container
come mostrato negli screenshot #4 e #5 . - Fai doppio clic su
Data Flow Task
per passare alData Flow
scheda. Inserisci unXML Source
componente e unaOLE DB Destination
come mostrato nella schermata #6 . - Configura il
XML Source
come mostrato nella schermata #7 e #8 . Il percorso del file XML verrà recuperato dalla variabile FilePath . Questa variabile verrà popolata dalForeach Loop container
. Nota: Nelle versioni successive di Visual Studio, XML Source sarà errore dovuto alla proprietà ValidateExternalMetadata. Per risolvere questo problema, fai clic su "Sorgente XML", quindi su Proprietà e imposta ValidateExternalMetadata su False . - Configura la
OLE DB Destination
come mostrato negli screenshot #9 e #10 . - Schermate #11 e #12 mostra l'esecuzione del pacchetto.
- Schermata #13 mostra i dati della tabella prima l'esecuzione del pacchetto. Screenshot n. 14 mostra i dati della tabella dopo l'esecuzione del pacchetto. I dati nella tabella
dbo.Items
ora contiene i dati presenti in tre file XML.
Spero di esserti stato d'aiuto.
Script 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
File 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>
File XML
Elementi_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>
Elementi_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>
Elementi_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>
Schermata n. 1:
Schermata n. 2:
Schermata n. 3:
Schermata n. 4:
Schermata n. 5:
Schermata n. 6:
Schermata n. 7:
Schermata n. 8:
Schermata n. 9:
Schermata n. 10:
Schermata n. 11:
Schermata n. 12:
Schermata n. 13:
Schermata n. 14: