Cómo importar datos de Excel a SQL Server

Seleccione idioma Seleccione idioma
Id. de artículo: 321686 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso muestra cómo importar datos de hojas de cálculo de Microsoft Excel en bases de datos de Microsoft SQL Server mediante una variedad de métodos.

Descripción de la técnica

Los ejemplos de este artículo importan datos de Excel mediante:
  • SQL Server Data Transformation Services (DTS)
  • Microsoft SQL Server 2005 Integration Services (SSIS)
  • Servidores de SQL Server vinculados
  • Consultas de SQL Server distribuidas
  • ActiveX Data Objects (ADO) y el proveedor Microsoft OLE DB para SQL Server
  • ADO y el proveedor Microsoft OLE DB para Jet 4.0

Requisitos

La lista siguiente describe el hardware recomendado, software, infraestructura de red y service packs necesarios:
  • Instancia disponible de Microsoft SQL Server 7.0 o Microsoft SQL Server 2000 o Microsoft SQL Server 2005
  • Microsoft Visual Basic 6.0 de los ejemplos de ADO que utilice Visual Basic
Partes de este artículo se supone que está familiarizado con los temas siguientes:
  • Servicios de transformación de datos
  • Los servidores vinculados y las consultas distribuidas
  • Desarrollo de ADO en Visual Basic

Ejemplos

Importación frente a datos anexados

Las instrucciones de SQL de ejemplo que se utilizan en este artículo muestran las consultas para Crear Tablas que importan datos de Excel hacia una nueva tabla de SQL Server con la instrucción SELECT...INTO...FROM. Puede convertir estas instrucciones para consultas de datos anexándolas mediante el uso de INSERT INTO...SELECT...FROM mientras se siguen haciendo referencias a los objetos de origen y destino tal como se muestra en estos ejemplos de código.

Utilice DTS o SSIS

Puede utilizar el Asistente para importación de servicios de transformación de datos (DTS) de SQL Server o la importación de SQL Server y Asistente para exportación para importar datos de Excel en tablas de SQL Server. Cuando se recorre el asistente y selecciona las tablas de origen de Excel, recuerde que los nombres de objeto de Excel que se anexan con un signo de dólar ($) representan hojas de cálculo (por ejemplo, Hoja1$), y que los nombres de objeto normal sin el signo de dólar representan rangos con nombre de Excel.

Utilizar un servidor vinculado

Para simplificar las consultas, puede configurar un libro de Excel como un servidor vinculado en SQL Server.Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
306397 Cómo: Utilizar Excel con SQL Server de servidores vinculados y consultas distribuidas
El código siguiente importa los datos de la hoja de cálculo "Customers" en el servidor vinculado de Excel "EXCELLINK" en una nueva tabla de SQL Server, denominada XLImport1:
SELECT * INTO XLImport1 FROM EXCELLINK...[Customers$]
				
También puede ejecutar la consulta en el origen atravesando mediante OPENQUERY como sigue:
SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,
    'SELECT * FROM [Customers$]')
				

Utilizar consultas distribuidas

Si no desea configurar una conexión persistente con el libro de Excel como un servidor vinculado, puede importar datos para un propósito específico mediante el OPENDATASOURCE o la función OPENROWSET. Los siguientes ejemplos de código también importan los datos de la hoja de cálculo de los clientes de Excel en nuevas tablas de SQL Server:
SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Customers$]

SELECT * INTO XLImport4 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', 'SELECT * FROM [Customers$]')
				

Utilizar ADO y SQLOLEDB

Cuando se conectan a SQL Server en una aplicación de ADO con Microsoft OLE DB para SQL Server (SQLOLEDB), puede utilizar la misma sintaxis "consulta distribuida" desde el Uso de consultas distribuidas sección Importar datos de Excel a SQL Server.

En el siguiente ejemplo de código de Visual Basic 6.0, se requiere que se agregue una referencia de proyecto a objetos de datos ActiveX (ADO). Este ejemplo de código también muestra cómo utilizar OPENDATASOURCE y OPENROWSET a través de una conexión de SQLOLEDB.
    Dim cn As ADODB.Connection
    Dim strSQL As String
    Dim lngRecsAff As Long
    Set cn = New ADODB.Connection
    cn.Open "Provider=SQLOLEDB;Data Source=<server>;" & _
        "Initial Catalog=<database>;User ID=<user>;Password=<password>"

    'Import by using OPENDATASOURCE.
    strSQL = "SELECT * INTO XLImport6 FROM " & _
        "OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _
        "'Data Source=C:\test\xltest.xls;" & _
        "Extended Properties=Excel 8.0')...[Customers$]"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff

    'Import by using OPENROWSET and object name.
    strSQL = "SELECT * INTO XLImport7 FROM " & _
        "OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
        "'Excel 8.0;Database=C:\test\xltest.xls', " & _
        "[Customers$])"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff

    'Import by using OPENROWSET and SELECT query.
    strSQL = "SELECT * INTO XLImport8 FROM " & _
        "OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
        "'Excel 8.0;Database=C:\test\xltest.xls', " & _
        "'SELECT * FROM [Customers$]')"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff

    cn.Close
    Set cn = Nothing
				

Utilizar ADO y el proveedor Jet

En el ejemplo de la sección anterior se utiliza ADO con el proveedor de SQLOLEDB para conectar con el destino de la importación de Excel a SQL. También puede utilizar el proveedor OLE DB para Jet 4.0 para conectar con el origen de Excel.

El motor de base de datos Jet puede hacer referencia a bases de datos externas en las instrucciones de SQL mediante el uso de una sintaxis especial que ya tiene tres formatos diferentes:
  • [Ruta de acceso completa a la base de datos de Microsoft Access].[Nombre de la tabla]
  • [Nombre ISAM;Cadena de conexión de ISAM].[Nombre de la tabla]
  • [ODBC;Cadena de conexión ODBC].[Nombre de la tabla]
En esta sección se utiliza el formato tercero para realizar una conexión ODBC a la base de datos de SQL Server de destino. Puede utilizar un nombre de origen de datos ODBC (DSN) o una cadena de conexión sin DSN:
DSN:
    [odbc;DSN=<DSN name>;UID=<user>;PWD=<password>]

DSN-less:
   [odbc;Driver={SQL Server};Server=<server>;Database=<database>;
       UID=<user>;PWD=<password>]
				
En el siguiente ejemplo de código de Visual Basic 6.0, se requiere que se agregue una referencia de proyecto a ADO. Este ejemplo de código muestra cómo importar datos de Excel a SQL Server a través de una conexión ADO utilizando el proveedor Jet 4.0.
    Dim cn As ADODB.Connection
    Dim strSQL As String
    Dim lngRecsAff As Long
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\test\xltestt.xls;" & _
        "Extended Properties=Excel 8.0"
    
    'Import by using Jet Provider.
    strSQL = "SELECT * INTO [odbc;Driver={SQL Server};" & _
        "Server=<server>;Database=<database>;" & _
        "UID=<user>;PWD=<password>].XLImport9 " & _
        "FROM [Customers$]"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff
        
    cn.Close
    Set cn = Nothing
				
También puede utilizar esta sintaxis, que admite el proveedor Jet, para importar datos de Excel en otras bases de datos de Microsoft Access, bases de datos de método de acceso secuencial indizado (ISAM) ("escritorio") o bases de datos ODBC.

Solución de problemas

  • Recuerde que los nombres de objeto de Excel se anexan con un signo de dólar ($) representan hojas de cálculo (por ejemplo, Sheet1$) y que los nombres de objeto simple rangos con nombre de Excel.
  • En algunos casos, especialmente cuando se designa el origen de datos de Excel con el nombre de tabla en lugar de una consulta de selección, las columnas de la tabla de SQL Server de destino se reorganizan en orden alfabético.Para obtener información adicional acerca de este problema con el proveedor de Jet, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    299484 PRB: Las columnas se ordenan alfabéticamente cuando utiliza ADOX para recuperar las columnas de la tabla de Access
  • Cuando el proveedor Jet determina que una columna de Excel contiene datos numéricos y texto mixto, el proveedor Jet selecciona el tipo de datos "la mayoría" y devuelve valores no coincidentes como valores nulos.Para obtener información adicional acerca de cómo evitar este problema, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    194124 PRB: Valores de Excel se devuelven como NULL utiliza OpenRecordset de DAO

Referencias

Para obtener información adicional acerca de cómo utilizar Excel como un origen de datos, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
257819 HOWTO: Usar ADO con datos de Excel desde Visual Basic o VBA
Para obtener información adicional acerca de cómo transferir datos a Excel, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
295646 HOWTO: Transferir datos desde un origen de datos ADO a Excel con ADO
247412 INFO: Métodos para transferir datos a Excel desde Visual Basic
246335 HOWTO: Transferir datos desde un conjunto de registros ADO a Excel con automatización
319951 Cómo: Transferir datos a Excel mediante el uso de servicios de transformación de datos de SQL Server
306125 Cómo: Importar datos de SQL Server en Microsoft Excel

Propiedades

Id. de artículo: 321686 - Última revisión: miércoles, 02 de abril de 2014 - Versión: 12.0
La información de este artículo se refiere a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Palabras clave: 
kbhowtomaster kbjet kbmt KB321686 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 321686

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com