SQL SERVER – Ejecutar consultas sobre documentos de Excel

OpenRowset nos permite ejecutar sentencias SQL sobre servidores u objetos soportados por ADO sin necesidad de vincularlos al servidor pues nos proporciona un método ad hoc de acceso. Para ejemplificar esto vamos a ejecutar consultas sobre un documento de Excel desde SQL Server y lo trataremos como si fuera una tabla más contenida en nuestro servidor. 

*** Importante.  Por defecto SQL Server se instala con el soporte ad hoc deshabilitado por lo  que antes de iniciar las pruebas será necesario habilitarlo de la siguiente manera: 

sp_configure 'Ad Hoc Distributed Queries', 1;

RECONFIGURE;

Crearemos una hoja de cálculo de Excel que contenga la siguiente información:

excel-datos

 Es importante cerrar Excel una vez creada la hoja de cálculo pues de otra manera impedirá el acceso al recurso. Ahora ejecutaremos nuestro SQL Server Management studio y ejecutaremos la siguiente sentencia:

 SELECT *
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
                   'Excel 8.0;Database=RUTAARCHIVOEXCEL',
                   'SELECT * FROM [HOJAEXCEL$]')

 Donde: 

  • RUTAARCHIVOEXCEL: Ruta completa al archivo de Excel creado. Esta ruta debe ser accesible al servidor SQL Server. 
  • HOJAEXCEL: Nombre de la hoja donde capturamos los datos

 Al ejecutar la sentencia anterior obtendremos lo siguiente:

 openrowset_excel

Como puede observarse, SQL Server nos permite a través de OpenRowSet tener acceso ad hoc a un recurso soportado por ADO ya sea OleDb u ODBC. Dándonos la ventaja de tratarlo como un objeto más en nuestro servidor, en este caso, como una tabla más de nuestra base de datos.  Para ejemplificar eso haremos un join entre la hoja de cálculo de Excel y la tabla de empleados de la base de datos Adventure works.  La consulta a ejecutar sería la siguiente:

     SELECT Employee.Title , ExcelData.*
       FROM HumanResources.Employee Employee
  LEFT JOIN OPENROWSET(
              'Microsoft.Jet.OLEDB.4.0',
              'Excel 8.0;Database=C:\datos.xls',
              'SELECT * FROM [HOJA1$]'
            ) ExcelData
         on 1 = 1

  Que nos mostraría lo siguiente:

openrowset_excel_join

OpenRowset es una herramienta útil cuando debemos trabajar con múltiples orígenes de datos en conjunto con nuestro servidor SQL Server.

1 Trackback / Pingback

  1. SQL SERVER – Ejecutar consultas sobre documentos de Excel « DbRunas – Noticias y Recursos sobre Bases de Datos

Deja un comentario