sql server - tools - ¿Cómo cargar un archivo XML en una base de datos usando un paquete SSIS?
ssas tutorial (2)
Aquí hay una opción posible que demuestra cómo cargar múltiples archivos XML que tienen la misma definición en una tabla de SQL Server. El ejemplo usa SQL Server 2008 R2
y SSIS 2008 R2
. El ejemplo que se muestra aquí carga tres archivos XML en una tabla SQL utilizando la Data Flow Task
SSIS con la ayuda del componente XML Source
.
Proceso paso a paso:
- Cree una tabla llamada
dbo.Items
utilizando la secuencia de comandos proporcionada en la sección Scripts de SQL . - Cree un archivo XSD llamado
Items.xsd
en la ruta de la carpeta C: / temp / xsd utilizando el contenido proporcionado en la sección Archivo XSD . - Cree tres archivos XML, a saber,
Items_1.xml
,Items_2.xml
yItems_3.xml
en la ruta de la carpeta C: / temp / xml usando el contenido proporcionado en la sección de Archivos XML . - En el paquete, cree 3 variables, a saber,
FileExtension
,FilePath
yFolderPath
como se muestra en la captura de pantalla n. ° 1 . - En los Administradores de conexión del paquete, cree una Conexión OLE DB llamada
SQLServer
para conectarse a la Instancia de SQL Server como se muestra en la captura de pantalla n. ° 2 . - En la pestaña
Control Flow
, coloque unForeach loop container
y unaData Flow Task
dentro del contenedor de bucles Foreach como se muestra en la captura de pantalla n. ° 3 . - Configure el
Foreach Loop container
como se muestra en las capturas de pantalla # 4 y # 5 . - Haga doble clic en la
Data Flow Task
para navegar a la pestañaData Flow
. Coloque un componente deXML Source
y unOLE DB Destination
como se muestra en la captura de pantalla n.º 6 . - Configure la
XML Source
como se muestra en la captura de pantalla # 7 y # 8 . La ruta del archivo XML se recuperará de la variable FilePath . Esta variable se completará con elForeach Loop container
. - Configure el
OLE DB Destination
como se muestra en las capturas de pantalla # 9 y # 10 . - Las capturas de pantalla # 11 y # 12 muestran la ejecución del paquete.
- La captura de pantalla # 13 muestra los datos de la tabla antes de la ejecución del paquete. La captura de pantalla # 14 muestra los datos de la tabla después de la ejecución del paquete. Los datos en la tabla
dbo.Items
ahora contienen los datos presentes en tres archivos XML.
Espero que ayude.
Scripts 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
Archivo 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>
Archivos 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>
Captura de pantalla n. ° 1:
Captura de pantalla n. ° 2:
Captura de pantalla n. ° 3:
Captura de pantalla n. ° 4:
Captura de pantalla n. ° 5:
Captura de pantalla n.º 6:
Captura de pantalla n. ° 7:
Captura de pantalla n. ° 8:
Captura de pantalla n. ° 9:
Captura de pantalla n. ° 10:
Captura de pantalla n. ° 11:
Captura de pantalla n.º 12:
Captura de pantalla n.º 13:
Captura de pantalla n.º 14:
Estoy usando SSIS en Visual Studio 2008. Tengo muchos archivos XML que necesito procesar y ubicar en una estructura DB existente (SQL Server 2005). Este es mi primer intento de usar SSIS y estoy un poco atrapado. Encontré la tarea Flujo de datos XML, le asigné un archivo xml de prueba y su XSD asociado y asigné un nodo a una Tabla de base de datos. Mi pregunta es, ¿cómo asocio muchos nodos xsd con muchas tablas? Seguramente no tengo que configurar una fuente XML para cada tabla.
También debe agregar @[user::FilePath]
a [XML Source].[XMLData]
en la tarea de flujo de datos o el paquete dice que no se encontró ningún archivo fuente después de la ejecución del paquete.