Lista de campos variables

12/01/2005 - 12:50 por Ramon Zuluaga | Informe spam
Yo quiero hacer un sp que me busque varios registros con una condicion
parametrizada de la forma:

SELECT campo1, campo2,... WHERE campo1=@campo1

El where siempre sera el mismo pero mi problema es que la mayoria de las
veces no se necesita seleccionar todos los campos. Lo que quisiera es poder
enviarle al SP la lista de columnas a devolver como un parametro. Se podria
hacer esto ?

Me han hablado del sql dinamico y que debe evitarse. En este caso aunque lo
variable solo sea la lista de campos y no el where, sigue siendo sql
dinamico ?

Ramon Zuluaga

Preguntas similare

Leer las respuestas

#1 Tinoco
12/01/2005 - 13:51 | Informe spam
Hola Ramon,

Si. sigue siendo dinamico. Porque de todas formas tienes que unir las dos
cadenas y entre la lista de campos alguien puede inyectar el codigo SQL.

El mayor problema es la seguridad, pero si la lista de campos viene de una
parte segura o se ejecuta desde un sitio seguro, se podria utilizar

Hermilson Tinoco

"Ramon Zuluaga" wrote:

Yo quiero hacer un sp que me busque varios registros con una condicion
parametrizada de la forma:

SELECT campo1, campo2,... WHERE campo1=@campo1

El where siempre sera el mismo pero mi problema es que la mayoria de las
veces no se necesita seleccionar todos los campos. Lo que quisiera es poder
enviarle al SP la lista de columnas a devolver como un parametro. Se podria
hacer esto ?

Me han hablado del sql dinamico y que debe evitarse. En este caso aunque lo
variable solo sea la lista de campos y no el where, sigue siendo sql
dinamico ?

Ramon Zuluaga



Respuesta Responder a este mensaje
#2 qwalgrande
12/01/2005 - 14:05 | Informe spam
Hola.

Lo de "sql dinámico" suele ser malo porque se basa en construir una cadena
(de la forma que sea) que luego es ejecutada sin saber a ciencia cierta qué
es lo que estás lanzando, abriendo la posibilidad de que mediante mecanismos
que tú provees un usuario pueda ejecutar lo que no deseas. Pero si la cadena
sólo la puedes construir tú, el riesgo es bastante menor.

Ejemplo de riesgo: En tu sp tienes 2 parámetros, @campofiltro y
@listacampos. En lista campos el usuario pasa nombres de columnas separadas
por comas. Tú en el sp construyes la consulta y la ejecutas:

select @consulta = 'select ' + @listacampos + ' from tabla where campo1 = '
+ @campofiltro

exec (@consulta).

Problema: Que en el parámetro te pasen "campo1, campo2 from tablaX GO update
Customers set FirstName = "Pepe", LastName = "Pérez" GO" o algo peor. Tu sp
lo ejecuta y la lías parda.

Ejemplo de poco riesgo: En tu sp tienes un parámetro para el filtro y un
parámetro de tipo bit para cada campo susceptible de ser añadido o no. Tú en
el sp construyes la consulta (de forma algo más laboriosa) y la ejecutas.

select @consulta = 'select '
if @TieneC1 = 1
select @consulta = @consulta + 'campo1, '
if @TieneC2 = 1
select @consulta = @consulta + 'campo2, '
...

select @consulta = @consulta + ' from tabla where campo1 = ' + @campofiltro

exec (@consulta).

El riesgo es mucho menor, aun siendo "sql dinámico".

qwalgrande

"Ramon Zuluaga" wrote:

Yo quiero hacer un sp que me busque varios registros con una condicion
parametrizada de la forma:

SELECT campo1, campo2,... WHERE campo1=@campo1

El where siempre sera el mismo pero mi problema es que la mayoria de las
veces no se necesita seleccionar todos los campos. Lo que quisiera es poder
enviarle al SP la lista de columnas a devolver como un parametro. Se podria
hacer esto ?

Me han hablado del sql dinamico y que debe evitarse. En este caso aunque lo
variable solo sea la lista de campos y no el where, sigue siendo sql
dinamico ?

Ramon Zuluaga



Respuesta Responder a este mensaje
#3 Liliana Sorrentino
12/01/2005 - 19:33 | Informe spam
Hola Ramón,
Una opción sin SQL Dinámico, que dependerá de los índices que tengas
creados, puede ser:

SELECT campo1, campo2, ...
FROM tabla
WHERE campo1 LIKE ISNULL(@campo1 + '%', '%') AND campo2 LIKE ISNULL(@campo2
+ '%', '%') AND...

Saludos, Liliana.


"Ramon Zuluaga" escribió en el mensaje
news:#kdCowJ#
Yo quiero hacer un sp que me busque varios registros con una condicion
parametrizada de la forma:

SELECT campo1, campo2,... WHERE campo1=@campo1

El where siempre sera el mismo pero mi problema es que la mayoria de las
veces no se necesita seleccionar todos los campos. Lo que quisiera es


poder
enviarle al SP la lista de columnas a devolver como un parametro. Se


podria
hacer esto ?

Me han hablado del sql dinamico y que debe evitarse. En este caso aunque


lo
variable solo sea la lista de campos y no el where, sigue siendo sql
dinamico ?

Ramon Zuluaga


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida