Importación de datos de Excel a SQL Server o Azure SQL Database
Se aplica a: SQL Server Azure 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 Azure 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) |
Herramienta de copia masiva (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.
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.
En SQL Server Management Studio, conéctese a una instancia del SQL Server Motor de base de datos.
Expanda Bases de datos.
Haga clic con el botón derecho en una base de datos.
Seleccione Tareas.
Elija Importar datos o Exportar datos:
Se inicia el asistente:
Vea los siguientes artículos para más información:
- Iniciar el Asistente para importación y exportación de SQL Server
- Comenzar con este sencillo ejemplo del Asistente para importar y exportar
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, puede crear en su lugar un paquete de SSIS que usa el origen de Excel y el destino de SQL Server en el flujo de datos.
Vea los siguientes artículos para más información:
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).
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).
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 Server configuration: Ad Hoc Distributed Queries (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:
1 Las consultas distribuidas todavía se admiten en SQL Server, pero no se ha actualizado la documentación para esta característica.
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:
Requisitos previos
Para usar el resto de los métodos descritos en esta página (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.
Guardar datos de Excel como 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.
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 Azure SQL Database, consulte los siguientes artículos:
- Uso de BULK INSERT u OPENROWSET(BULK...) para importar datos a SQL Server
- BULK INSERT (Transact-SQL)
La herramienta de copia masiva (bcp)
La herramienta bcp 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. La herramienta 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
o OPENROWSET
. Para ver un ejemplo, consulte Uso de BULK INSERT u OPENROWSET(BULK...) para importar datos a SQL Server.
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:
- Importación y exportación de datos en bloque con BCP (SQL Server)
- bcp (utilidad)
- Preparación de los datos para la exportación o importación en bloque
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:
- Asistente para copia de Data Factory
- Tutorial: crear una canalización con la actividad de copia mediante el Asistente para copia de Data Factory
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:
- Movimiento de datos con la actividad de copia
- Tutorial: Crear una canalización con la actividad de copia mediante Azure Portal
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)"
Este error indica que la arquitectura OLEDB de Microsoft no se ha configurado correctamente. Ejecute el siguiente código Transact-SQL para resolver esta incidencia:
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
Este error 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.
Este error suele 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.
El error completo es:
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.
No se puede inicializar el objeto de origen de datos del proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(NULL)"
Este error suele 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.
El error completo es:
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)".