Wednesday, September 3, 2014

Parámetros y comodines (wildcards) en Excel para SQL Server Express

Antecedentes

Un día no muy lejano se me ocurrió probar la conexión entre MySQL Server y Excel, después de una conexión exitosa, decidí intentar con SQL Server. 
Instalé SQL Server Express 2008 R2 y utilicé ESF Database Migration para mover algunas tablas de MySQL a SQL Server. Todo iba bien hasta que intenté realizar algunas consultas con parámetros establecidos por el usuario desde celdas en Excel. SQL Server respondía error en la consulta pero no me daba pistas del error en especifico, por lo que busqué algún método de rastrear las consultas de SQL Server y esto fue lo que encontré...

Introducción

SQL Server (versión de paga) tiene una herramienta de nombre "SQL Server Managment Studio" (SSMS), la cual sirve para configurar y administrar las bases de datos. Dentro de estas herramientas se incluye un componente de nombre "SQL Server Profiler" el cual captura los eventos de SQL Server, y como tal; las consultas realizas. El problema llega cuando te das cuenta de que este complemento solo está disponible para la versión de paga, dejando a SQL Server Express sin posibilidad oficial de monitorear las consultas.

Solución (Monitorear consultas SQL Server Express)

Dentro de las fabulosas soluciones que se desarrollan en CodePlex, existe una herramienta de nombre ExpressProfiler, la cual está enfocada a ser un sustituto sencillo y siempre para "SQL Server Profiler" y lo mejor es que funciona para "SQL Server Express", entonces:

  1.- Descargamos e instalamos Express Pofiler.
  2.- Ejecutamos la aplicación desde (C:\Program Files (x86)\ExpressProfiler\ExpressProfiler.exe).
  3.- Seleccionamos nuestro servidor e instancia.
  4.- Damos click en "Start Trace".

Listo, con esto podemos monitorear las consultas y ajustar los parámetros de acuerdo a nuestras necesidades.

Solución (Parámetros en Excel para SQL Server)

La solución simplificada de este post, se resume en lo siguiente:

* Cómo podemos observar en Express Profiler, los parámetros en automático incluyen los entrecomillados sencillos, es decir, no es necesario agregar las comillas para los parámetros de texto o fecha.

* Para agregar los wildcards de SQL utilizamos otra celda con referencia y con la ayuda de formulas completamos nuestra consulta.

Ejemplo de consulta desde Microsoft Query:

SELECT p.nombre AS 'Proyecto', u.nombre AS 'Usuario', p.tot_solicitado AS 'Total'
FROM prota2.proyectos_internos p
INNER JOIN prota2.usuarios u ON p.usuario = u.id
INNER JOIN prota2.cuentas_b c ON p.cuenta_b = c.id
WHERE p.fecha_solicitud between ? AND ?
AND p.nombre LIKE ?
AND c.num_cuenta_b LIKE ?
AND u.nombre LIKE ?

Los parámetros editables por el usuario son (agregamos en Excel):

Fig. 1.1 - Parámetros definidos por el usuario en Excel.

Cómo se puede observar, tenemos en este ejemplo:
  - 3 Parámetros de texto.
  - 2 Parámetros de fecha (validados por una lista para evitar problemas de la información que ingrese el usuario).

Las formulas de ayuda para poder utilizar los wildcards de SQL son:

Fig. 1.2 - Formulas de ayuda para wildcards.

En el Express Profiler se puede observar la consulta como:

N'@P1 nvarchar(27),@P2 nvarchar(27),@P3 varchar(100),@P4 varchar(20),@P5 varchar(35)',N'SELECT p.nombre AS ''Proyecto'', u.nombre AS ''Usuario'', p.tot_solicitado AS ''Total''
FROM prota2.proyectos_internos p
INNER JOIN prota2.usuarios u ON p.usuario = u.id
INNER JOIN prota2.cuentas_b c ON p.cuenta_b = c.id
WHERE p.fecha_solicitud between @P1 AND @P2
AND p.nombre LIKE @P3
AND c.num_cuenta_b LIKE @P4
AND u.nombre LIKE @P5',N'20140101',N'20140927','%%','%%','%emir%'

En resumen

Los parámetros en Excel incluyen en automático los entrecomilldos y para agregar wildcards debemos utilizar formulas, como "concatenar" o "texto" para establecer formato a un valor.