Select y filtro

08/06/2009 - 22:23 por Cristian Meneses | Informe spam
Buenas tardes
Tengo un procedimiento almacenado sobre SQL2005 Express...
El mismo recibe por parametro una variable @SQLFILTRO varchar(5000).
Actualmente funciona bien de forma que me filtra como quiero. A
continuacion el SELECT

DECLARE @SQL AS VARCHAR(8000)
SET @SQL = 'SELECT
A.Campo1
A.Campo2
A.Campo3
FROM A
INNER JOIN B ON A.ID = B.ID
WHERE A.Eliminado = 0 AND ' + @SQLFiltro
EXEC (@SQL)

De esta forma puedo pasar por parametro desde mi aplicacion por ej
Campo1 = 158.
El problema radica cuando este parametro hace referencia a un campo
que no muestro, por ej, Campo5 = '01/01/2009'
El tema es que quiero mostrar siempre el campo del parametro y no se
como hacerlo. Pense en usar CASE WHEN o IF pero son muchos campos
posibles. Quizas exista alguna mejor forma.
Muchas gracias


Cristian Meneses

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
08/06/2009 - 22:50 | Informe spam
Hola Cristian,

On 8 jun, 22:23, Cristian Meneses wrote:
Buenas tardes
Tengo un procedimiento almacenado sobre SQL2005 Express...
El mismo recibe por parametro una variable @SQLFILTRO varchar(5000).
Actualmente funciona bien de forma que me filtra como quiero. A
continuacion el SELECT

DECLARE @SQL AS VARCHAR(8000)
SET @SQL = 'SELECT
A.Campo1
A.Campo2
A.Campo3
FROM A
INNER JOIN B ON A.ID = B.ID
WHERE A.Eliminado = 0 AND ' + @SQLFiltro
EXEC (@SQL)

De esta forma puedo pasar por parametro desde mi aplicacion por ej
Campo1 = 158.
El problema radica cuando este parametro hace referencia a un campo
que no muestro, por ej, Campo5 = '01/01/2009'
El tema es que quiero mostrar siempre el campo del parametro y no se
como hacerlo. Pense en usar CASE WHEN o IF pero son muchos campos
posibles. Quizas exista alguna mejor forma.
Muchas gracias




Me parece que la esencia es que solo quieres ver los registros de
A que no hayan sido eliminados (A.Eliminado = 0). Entonces puedes
crear una vista sobre A solo para eso. Usa esa vista en vez de la
tabla A en tus consultas, no dés derechos de acceso a la tabla
original y olvídate de ese procedimiento. Ese es mi consejo.

Hasta puedes darle otro nombre a la tabla original, darle el nombre
A a la vista y los registros eliminados desaparecerán de los
resultados de las consultas existentes.

(Quizás no sea este el tipo de consejo que estabas esperando,
pero es que no le veo otra razón de ser a ese procedimiento)

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 Alejandro Mesa
09/06/2009 - 15:16 | Informe spam
Carlos,

Bienvenido de vuelta.


AMB


"Carlos M. Calvelo" wrote:

Hola Cristian,

On 8 jun, 22:23, Cristian Meneses wrote:
> Buenas tardes
> Tengo un procedimiento almacenado sobre SQL2005 Express...
> El mismo recibe por parametro una variable @SQLFILTRO varchar(5000).
> Actualmente funciona bien de forma que me filtra como quiero. A
> continuacion el SELECT
>
> DECLARE @SQL AS VARCHAR(8000)
> SET @SQL = 'SELECT
> A.Campo1
> A.Campo2
> A.Campo3
> FROM A
> INNER JOIN B ON A.ID = B.ID
> WHERE A.Eliminado = 0 AND ' + @SQLFiltro
> EXEC (@SQL)
>
> De esta forma puedo pasar por parametro desde mi aplicacion por ej
> Campo1 = 158.
> El problema radica cuando este parametro hace referencia a un campo
> que no muestro, por ej, Campo5 = '01/01/2009'
> El tema es que quiero mostrar siempre el campo del parametro y no se
> como hacerlo. Pense en usar CASE WHEN o IF pero son muchos campos
> posibles. Quizas exista alguna mejor forma.
> Muchas gracias
>

Me parece que la esencia es que solo quieres ver los registros de
A que no hayan sido eliminados (A.Eliminado = 0). Entonces puedes
crear una vista sobre A solo para eso. Usa esa vista en vez de la
tabla A en tus consultas, no dés derechos de acceso a la tabla
original y olvídate de ese procedimiento. Ese es mi consejo.

Hasta puedes darle otro nombre a la tabla original, darle el nombre
A a la vista y los registros eliminados desaparecerán de los
resultados de las consultas existentes.

(Quizás no sea este el tipo de consejo que estabas esperando,
pero es que no le veo otra razón de ser a ese procedimiento)

Saludos,
Carlos

Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
09/06/2009 - 16:58 | Informe spam
On 9 jun, 15:16, Alejandro Mesa
wrote:
Carlos,

Bienvenido de vuelta.




Gracias Alejandro. Es que he estado (y estoy) muy ajetreado.

Agradezco el detalle, ;-)
Carlos
Respuesta Responder a este mensaje
#4 Maxi
11/06/2009 - 03:58 | Informe spam
Cristian no tiene mucho sentido hacer este query dinamico, no usarias
algunas de las ventajas de los Store.
De todas maneras como usas dinamico es cuestion de armar la cadena como
gustes a nivel filtro y campo, no entiendo porque no te sale.
Podrias mostrarnos un ejemplo?



Maxi Accotto
Microsoft MVP en SQL Server
Consultor en SQL Server
http://blog.maxiaccotto.com



"Cristian Meneses" escribió en el mensaje de
noticias:
Buenas tardes
Tengo un procedimiento almacenado sobre SQL2005 Express...
El mismo recibe por parametro una variable @SQLFILTRO varchar(5000).
Actualmente funciona bien de forma que me filtra como quiero. A
continuacion el SELECT

DECLARE @SQL AS VARCHAR(8000)
SET @SQL = 'SELECT
A.Campo1
A.Campo2
A.Campo3
FROM A
INNER JOIN B ON A.ID = B.ID
WHERE A.Eliminado = 0 AND ' + @SQLFiltro
EXEC (@SQL)

De esta forma puedo pasar por parametro desde mi aplicacion por ej
Campo1 = 158.
El problema radica cuando este parametro hace referencia a un campo
que no muestro, por ej, Campo5 = '01/01/2009'
El tema es que quiero mostrar siempre el campo del parametro y no se
como hacerlo. Pense en usar CASE WHEN o IF pero son muchos campos
posibles. Quizas exista alguna mejor forma.
Muchas gracias


Cristian Meneses
Respuesta Responder a este mensaje
#5 Cristian Meneses
11/06/2009 - 17:09 | Informe spam
Buenos dias a todos
He solucionado mi problema.

Carlos: Me gustaria saber si tienes mas sobre tu consejo. Siempre he
trabajado sobre la tabla directamente sin saber de los peligros. La
vista sugerida (con Eliminado = 0) se actualiza siempre?

Maxi: Si bien se que no debo usar sql dinamico, esta vez vi que no me
quedaba otra opcion.

El tema es que utilizo vb2005 y crystal reports. Necesitaba un listado
que ademas de mostrarme unos campos "fijos", me mostrara aquel por el
cual se filtraba la informacion e incluso ordenado por este campo. Por
ej.

SELECT
ID, Apellido, Nombre, DNI, FechaNacimiento, --ESTOS CAMPOS SON
FIJOS PARA TODOS LOS INFORMES
@CAMPOFILTRO AS '@CAMPOFILTRO'
FROM Tabla
WHERE @FILTRO --POR EJ. Ciudad LIKE 'Barce%'
ORDER BY @CAMPOFILTRO

Como @FILTRO lo paso desde mi aplicacion y tengo controlado su
contenido, genero @CAMPOFILTRO buscando dentro de filtro la primera
palabra.
Espero se haya entendido. Muchas gracias a todos por su ayuda.


Cristian Meneses
SQL Server 2005 Express
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida