Importación de datos de Excel a SQL Server o Azure SQL Database

Se aplica a:SQL ServerAzure SQL Database

Hay varias formas de importar datos de archivos de Excel a SQL Server o a Azure SQL Database. Algunos métodos permiten importar datos en un solo paso directamente desde archivos de Excel, mientras que otros requieren que exporte los datos de Excel como texto (archivo CSV) antes de poder importarlos.

En este artículo se resumen los métodos que se usan con frecuencia y se proporcionan vínculos a información más detallada. La descripción completa de herramientas complejas y servicios como SSIS o Azure Data Factory queda fuera del ámbito de este artículo. Para obtener más información sobre la solución de su interés, siga los vínculos proporcionados.

Lista de métodos

Hay varias formas de importar datos desde Excel. Es posible que deba instalar SQL Server Management Studio (SSMS) para usar algunas de estas herramientas.

Puede usar las herramientas siguientes para importar datos de Excel:

Exportar a texto en primer lugar (SQL Server y SQL Database) Directamente desde Excel (solo SQL Server local)
Asistente para la importación de archivos planos Asistente para importación y exportación de SQL Server
Instrucción BULK INSERT SQL Server Integration Services (SSIS)
BCP Función OPENROWSET
Asistente para copia (Azure Data Factory)
Azure Data Factory

Si quiere importar varias hojas de cálculo de un libro de Excel, normalmente hay que ejecutar alguna de estas herramientas una vez para cada hoja.

Importante

Para obtener más información, consulte Limitaciones y problemas conocidos de la carga de datos en o desde archivos de Excel.

Asistente para importación y exportación

Importe datos directamente desde archivos de Excel mediante el Asistente para importación y exportación de SQL Server. También puedes guardar la configuración como un paquete de SQL Server Integration Services (SSIS) que puedes personalizar y reutilizar más adelante.

  1. En SQL Server Management Studio, conéctese a una instancia del SQL Server Motor de base de datos.

  2. Expanda Bases de datos.

  3. Haga clic con el botón derecho en una base de datos.

  4. Seleccione Tareas.

  5. Elija Importar datos o Exportar datos:

    Start wizard SSMS

Se inicia el asistente:

Connect to an Excel data source

Para obtener más información, revise:

Integration Services (SSIS)

Si conoce SQL Server Integration Services (SSIS) y no quiere ejecutar el Asistente para importación y exportación de SQL Server, cree un paquete de SSIS que usa el origen de Excel y el destino de SQL Server en el flujo de datos.

Para obtener más información, revise:

Para empezar a obtener información sobre cómo compilar paquetes de SSIS, vea el tutorial How to Create an ETL Package (Creación de un paquete de ETL).

Components in the data flow

OPENROWSET y servidores vinculados

Importante

En Azure SQL Database, no se puede importar directamente desde Excel. Primero debe exportar los datos a un archivo de texto (CSV).

Nota:

El proveedor de ACE (anteriormente, el proveedor de Jet) que se conecta a los orígenes de datos de Excel está diseñado para un uso interactivo del lado cliente. Si usa el proveedor de ACE en SQL Server, especialmente en procesos automatizados o en procesos que se ejecutan en paralelo, puede obtener resultados inesperados.

Consultas distribuidas

Importe datos directamente a SQL Server desde archivos de Excel con la función OPENROWSET u OPENDATASOURCE de Transact-SQL. A este uso se le denomina consulta distribuida.

Importante

En Azure SQL Database, no se puede importar directamente desde Excel. Primero debe exportar los datos a un archivo de texto (CSV).

Para poder ejecutar una consulta distribuida, primero debe habilitar la opción de configuración del servidor ad hoc distributed queries, como se muestra en el ejemplo siguiente. Para más información, vea ad hoc distributed queries Server Configuration Option (Opción de configuración del servidor Consultas distribuidas ad hoc).

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'ad hoc distributed queries', 1;
RECONFIGURE;
GO

En el ejemplo de código siguiente se usa OPENROWSET para importar los datos de la hoja de cálculo Sheet1 de Excel a una nueva tabla de base de datos.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\Temp\Data.xlsx', [Sheet1$]);
GO

Este es el mismo ejemplo con OPENDATASOURCE.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:\Temp\Data.xlsx;Extended Properties=Excel 12.0')...[Sheet1$];
GO

Para anexar los datos importados a una tabla existente en lugar de crear una tabla nueva, use la sintaxis INSERT INTO ... SELECT ... FROM ... en lugar de la sintaxis SELECT ... INTO ... FROM ... utilizada en los ejemplos anteriores.

Para consultar los datos de Excel sin importarlos, solo tiene que usar la sintaxis SELECT ... FROM ... estándar.

Para obtener más información sobre las consultas distribuidas, consulta los siguientes artículos:

Servidores vinculados

También puede configurar una conexión persistente desde SQL Server al archivo de Excel como un servidor vinculado. En el ejemplo siguiente se importan los datos de la hoja de cálculo Data del servidor vinculado a Excel existente EXCELLINK en una nueva tabla de base de datos de SQL Server denominada Data_ls.

USE ImportFromExcel;
GO
SELECT * INTO Data_ls FROM EXCELLINK...[Data$];
GO

Puedes crear un servidor vinculado desde SQL Server Management Studio (SSMS) o mediante la ejecución del procedimiento almacenado del sistema sp_addlinkedserver, como se muestra en el ejemplo siguiente.

DECLARE @RC INT;
DECLARE @server NVARCHAR(128);
DECLARE @srvproduct NVARCHAR(128);
DECLARE @provider NVARCHAR(128);
DECLARE @datasrc NVARCHAR(4000);
DECLARE @location NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @catalog NVARCHAR(128);

-- Set parameter values
SET @server = 'EXCELLINK';
SET @srvproduct = 'Excel';
SET @provider = 'Microsoft.ACE.OLEDB.12.0';
SET @datasrc = 'C:\Temp\Data.xlsx';
SET @provstr = 'Excel 12.0';

EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server,
    @srvproduct,
    @provider,
    @datasrc,
    @location,
    @provstr,
    @catalog;

Para obtener más información sobre los servidores vinculados, consulta los siguientes artículos:

Para obtener más ejemplos e información sobre los servidores vinculados y las consultas distribuidas, consulta los siguientes artículos:

Requisito previo: guardar datos de Excel como texto

Para usar el resto de los métodos descritos en esta página, es decir, la instrucción BULK INSERT, la herramienta BCP o Azure Data Factory, primero tiene que exportar los datos de Excel a un archivo de texto.

En Excel, seleccione Archivo | Guardar como y luego Texto (delimitado por tabulaciones) (*.txt) o CSV (delimitado por comas) (.csv) como tipo de archivo de destino.

Si quieres exportar varias hojas de cálculo del libro, selecciona cada hoja y repite este procedimiento. El comando Guardar como solo exporta la hoja activa.

Sugerencia

Para obtener mejores resultados con las herramientas de importación de datos, guarde hojas que contienen solo los encabezados de columna y las filas de datos. Si los datos guardados contienen títulos de página, líneas en blanco, notas, etc., puede obtener resultados inesperados después al importar los datos.

El Asistente para la importación de archivos planos

Importe datos guardados como archivos de texto siguiendo las páginas del Asistente para la importación de archivos planos.

Como se ha descrito anteriormente en la sección Requisitos previos, debe exportar los datos de Excel como texto para poder usar el Asistente para la importación de archivos planos para importarlos.

Para más información sobre el Asistente para la importación de archivos planos, consulte Importación de archivos planos mediante el asistente de SQL.

Comando BULK INSERT

BULK INSERT es un comando de Transact-SQL que se puede ejecutar desde SQL Server Management Studio. En el ejemplo siguiente, se cargan los datos del archivo delimitado por comas Data.csv en una tabla de base de datos existente.

Como se ha descrito anteriormente en la sección Requisitos previos, debe exportar los datos de Excel como texto para poder usar BULK INSERT para importarlos. BULK INSERT no puede leer los archivos de Excel directamente. Con el comando BULK INSERT, puede importar un archivo CSV que está almacenado localmente o en Azure Blob Storage.

USE ImportFromExcel;
GO
BULK INSERT Data_bi FROM 'C:\Temp\data.csv'
   WITH (
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO

Para obtener más información y ejemplos de SQL Server y SQL Database, consulta los siguientes artículos:

Herramienta BCP

BCP es un programa que se ejecuta desde el símbolo del sistema. En el ejemplo siguiente, se cargan los datos del archivo delimitado por comas Data.csv en la tabla de base de datos Data_bcp existente.

Como se ha descrito anteriormente en la sección Requisitos previos, debe exportar los datos de Excel como texto para poder usar BCP para importarlos. BCP no puede leer los archivos de Excel directamente. Se usa para importar a SQL Server o SQL Database desde un archivo de prueba (CSV) guardado en el almacenamiento local.

Importante

Para un archivo de texto (CSV) almacenado en Azure Blob Storage, use BULK INSERT u OPENROWSET. Para obtener ejemplos, vea Ejemplo.

bcp.exe ImportFromExcel..Data_bcp in "C:\Temp\data.csv" -T -c -t ,

Para obtener más información acerca de BCP, consulta los siguientes artículos:

Asistente para copia (ADF)

Importe datos guardados como archivos de texto siguiendo las páginas del Asistente para copia de Azure Data Factory (ADF).

Como se ha descrito anteriormente en la sección Requisitos previos, debe exportar los datos de Excel como texto para poder usar Azure Data Factory para importarlos. Data Factory no puede leer los archivos de Excel directamente.

Para obtener más información sobre el Asistente para copia, consulta los siguientes artículos:

Azure Data Factory

Si está familiarizado con Azure Data Factory y no quiere ejecutar al Asistente para copia, cree una canalización con una actividad de copia que copie el archivo de texto en SQL Server o en Azure SQL Database.

Como se ha descrito anteriormente en la sección Requisitos previos, debe exportar los datos de Excel como texto para poder usar Azure Data Factory para importarlos. Data Factory no puede leer los archivos de Excel directamente.

Para obtener más información sobre el uso de estos orígenes y receptores de Data Factory, consulta los siguientes artículos:

Para empezar a obtener información sobre cómo copiar los datos con Azure Data Factory, vea los siguientes artículos:

Errores comunes

Microsoft.ACE.OLEDB.12.0" no se ha registrado

Este error se debe a que el proveedor OLEDB no está instalado. Instálalo desde Microsoft Access Database Engine 2016 Redistributable. Asegúrese de instalar la versión de 64 bits si tanto Windows como SQL Server son de 64 bits.

El error completo es:

Msg 7403, Level 16, State 1, Line 3
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.

No se puede crear una instancia del proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(NULL)"

Esto indica que la arquitectura OLEDB de Microsoft no se ha configurado correctamente. Ejecute el siguiente código Transact-SQL para resolver este error:

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;

El error completo es:

Msg 7302, Level 16, State 1, Line 3
Cannot create an instance of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

El proveedor OLE DB de 32 bits "Microsoft.ACE.OLEDB.12.0" no se puede cargar en curso en una instancia de SQL Server de 64 bits

Esto se produce cuando hay instalada una versión de 32 bits del proveedor OLD DB con un servidor SQL Server de 64 bits. Para resolver esta incidencia, desinstale la versión de 32 bits del proveedor OLE DB e instale la versión de 64 bits en su lugar.

El error completo es:

Msg 7438, Level 16, State 1, Line 3
The 32-bit OLE DB provider "Microsoft.ACE.OLEDB.12.0" cannot be loaded in-process on a 64-bit SQL Server.

El proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(NULL)" informó de un error.

No se puede inicializar el objeto de origen de datos del proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(NULL)"

Estos dos errores suelen indicar una incidencia de permisos entre el proceso de SQL Server y el archivo. Asegúrese de que la cuenta que ejecuta el servicio SQL Server tiene permiso de acceso total al archivo. Se recomienda no intentar importar archivos desde el escritorio.

Los errores completos son:

Msg 7399, Level 16, State 1, Line 3
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 3
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Pasos siguientes