Paso de parámetros a consultas SQL

Tengo un Excel que obtiene datos de una tabla de una base de datos de SQL Server.
Tengo puesto unos parámetros para filtrar por varios campos de esa tabla y los he asociado a celdas del Excel.
El problema es que siempre me filtra por los valores que tengan esas celdas (tengo 7 parámetros, por lo que la consulta me devuelve 1 o ningún registro) y yo quiero que cuando el valor de la celda sea nulo no me haga el filtro en la consulta SQL.
¿Qué podría hacer para arreglar esto?
La consulta SQL es la siguiente:
SELECT ActividadServicio.Asunto, ActividadServicio."Fecha de Inicio", ActividadServicio."Fecha de Fin", ActividadServicio.Cliente, ActividadServicio.Propietario, ActividadServicio.Estado, ActividadServicio."Tipo de Servicio"
FROM BaseDeDatos.dbo.ActividadServicio ActividadServicio
WHERE (ActividadServicio.Anio=?) AND (ActividadServicio.Quarter=?) AND (ActividadServicio.Mes=?) AND (ActividadServicio.Estado=?) AND (ActividadServicio."Tipo de Servicio"=?) AND (ActividadServicio.Cliente=?) AND (ActividadServicio.Propietario=?)

1 respuesta

Respuesta
1
Si modificar la consulta de SQL de esta manera obtendrás el resultado deseado
Transforma las condiciones WHERE por
((ActividadServicio.Anio=?) OR ?='' )
donde ? es el parametro.
Si en parámetro vale '' entonces esta clausula where se desactiva.
Hola carruina.
Muchas gracias por la respuesta, pero no he conseguido que me funcione.
Primero he modificado los nombres de las columnas "largas" para evitarme más problemas.
He modificado la consulta como me has dicho anteriormente y quedaría así:
SELECT ActividadServicio.Asunto, ActividadServicio.FechaInicio, ActividadServicio.FechaFin, ActividadServicio.Cliente, ActividadServicio.Propietario, ActividadServicio.Estado, ActividadServicio.TipoServicio
FROM BaseDeDatos.dbo.ActividadServicio ActividadServicio
WHERE ((ActividadServicio.Anio=?) OR ?='') AND ((ActividadServicio.Quarter=?) OR ?='') AND ((ActividadServicio.Mes=?) OR ?='') AND ((ActividadServicio.Estado=?) OR ?='') AND ((ActividadServicio.TipoServicio=?) OR ?='') AND ((ActividadServicio.Cliente=?) OR ?='') AND ((ActividadServicio.Propietario=?) OR ?='')
Pero al darle a aceptar me pide valor del parámetro siempre (por mucho que le dé a aceptar, ya sea con algún valor o sin él, me vuelve a pedir un valor).
Si modifico la consulta para solo filtrar por el Anio también me falla. Me dice que falta o está vacío un nombre de objeto o columna...
La consulta con solo el año es esta:
SELECT ActividadServicio.Asunto, ActividadServicio.FechaInicio, ActividadServicio.FechaFin, ActividadServicio.Cliente, ActividadServicio.Propietario, ActividadServicio.Estado, ActividadServicio.TipoServicio
FROM BaseDeDatos.dbo.ActividadServicio ActividadServicio
WHERE ((ActividadServicio.Anio=?) OR ?='')
Muchas gracias por ayudarme.
Para dar más datos, voy a explicar de que tipo son cada campo por los que filtro en la tabla:
Anio - int
Mes - int
Quarter - int
Estado - nvarchar(11)
TipoServicio - nvarchar(160)
Cliente - nvarchar(400)
Propietario - nvarchar(160)
Un saludo y muchas gracias.
Me imagino que habrás creado un parámetro para cada valor
Por ejemplo para el campo Anio: lparAnio
La SQL tendría este aspecto
SELECT ActividadServicio.Asunto, ActividadServicio.FechaInicio, ActividadServicio.FechaFin, ActividadServicio.Cliente, ActividadServicio.Propietario, ActividadServicio.Estado, ActividadServicio.TipoServicio
FROM BaseDeDatos.dbo.ActividadServicio ActividadServicio
WHERE ((ActividadServicio.Anio=[lparAnio]) OR [lparAnio]=0)
Es posible que sea necesario cambiar '' por 0 en el caso de los numéricos
Si en la casilla de Excel que has asociado al parámetro LparAnio pones 0 entonces el filtro se desactiva.
Una pregunta tonta, ¿cómo se crean los paramétros?
¿Yo es que siempre ponía los? Y así me ha funcionado porque después me lo sustituía por un nombre de parámetro, pero ahora no me funciona.
He probado con el 0 y no me funciona, pero será porque no he creado el parámetro.
Un saludo y muchas gracias.
En Excel: Menu Datos->Obtener Datos Externos-> Nueva Consulta de Base De DAtos. Se inicia Ms Queries
Selecciona el ODBC y la tabla sobre la que quieres hacer la consulta
Seleccionas los campos y añades los criterios. En los criterios debes de poner [nombreparametro] entre corchetes.
Suando devuelves los datos a EXcel entonces puedes asociar esos parámetros a celdas
Si la consulta ya la tienes hecha Pulsa Modificar Consulta y añade los criterios con los parámetros entre corchetes

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas