= TODOS ???

28/04/2005 - 17:24 por DiegoC | Informe spam
Como puedo hacer para que la siguiente consulta me traiga TODOS los valores
como si fuese un LIKE '%' pero para un Integer

Ej; SELECT * FROM Tabla1 WHERE Id_Tabla1 = TODOS And Id_Destino = 2

El tema del TODOS es no se que poner para que me traiga TODOS los valores,
lo que necesito es que funcione como se fuese:

SELECT * FROM Tabla1 WHERE Id_Destino = 2

Pero el tema que lo unico que puedo tocar de la consulta es la Variable
TODOS.

Desde ya muchas gracias.

Saludos, Diego

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
28/04/2005 - 19:22 | Informe spam
Diego,

Tienes varias soluciones. Cual usar?, eso depende de si la columna
[id_division] permite valores nulos o no, asi como de que exista algun indice
por esta columna, pues a la final se trata de encontrar una solucion optima
en caso de que se pueda.
Lo primero que te recomiendo es que no construyas la sentencia de esa forma
(dinamicamente en la aplicacion cliente), pues me inmagino que hayas oido
hablar sobre la inyeccion de codigo hacia sql server, asi como de los
benificios de usar procedimientos almacenados), sino que crees un
procedimiento almacenado que haga una busqueda dinamica basada en los valores
pasados a sus parametros.

Veamos un ejemplo, supongamos que queremos selecionar una orden o todas
basado en el valor del parametro @orderid. La columna orderid de la tabla
orders en la bd northwind, no acepta valores nulos, los valores son mayores
que cero y ademas la tabla tiene un indice por esa columna

use northwind
go

create procedure dbo.usp_proc1
@orderid int = null
as
set nocount on

declare @min_int int, @max_int int

set @min_int = 1
set @max_int = 2147483647

select orderid, orderdate, customerid
from dbo.orders
where orderid between coalesce(@orderid, @min_int) and coalesce(@orderid,
@max_int)

return @@error
go

si llamamos a este procedimiento con un valor, por ejemplo 10250, nos
devolvera la informacion de la orden 10250, pero si no pasamos un valor o
pasamos null, entonces nos devolvera la informacion de todas las ordenes
existentes.

exec dbo.usp_proc1 @orderid = 10250
exec dbo.usp_proc1 @orderid = null
exec dbo.usp_proc1
go

Ahora puedes crear un objeto de tipo adodb.command, asignar el valor TRUE a
la propiedad propiedad NamedParameters y agregar los parametros a la
coleccion de parametros en base a si la variable Variable1 tiene valor o no.

Aca te paso un link a un estupendo articulo que habla sobre el uso de
condiciones de busqueda dinamicas en t-sql.

Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html


AMB

"DiegoC" wrote:

Hola Alejandro,

El tema es que estoy armando unas consultas a travez de VB, y las consultas
quedan algo asi:

sql = "Select E.Id_Prestaciones, E.Descripcion, D.Division From Estudios E
Left Join Divisiones D On E.Id_Division = D.Id_Division Where E.Id_Division
= " & Variable1 & " And E.Id_Destino = " & Variable2
Coneccion.Execute sql

Mientras las Variables tengan un Codigo de Filtrado no hay problema, el
problema es cuando por Ej:
La Variable1 no tiene Valor porque en ese momento no lo quieren filtrar por
ese campo, sino que quieren TODOS, y si filtrar con la Variable2. O
viseversa.

Es por eso que querria saber que poner en la Variable para que cuando no
quieran usar ese filtro me traiga todos.

Desde ya muchas gracias, Diego


"Alejandro Mesa" escribió en el
mensaje news:
> DiegoC,
>
> Para hacer lo que quieres debes cambiar la clausula WHERE, pues no existe
> wildchar para el operador de igualdad.
>
>
> AMB
>
> "DiegoC" wrote:
>
> > Como puedo hacer para que la siguiente consulta me traiga TODOS los
valores
> > como si fuese un LIKE '%' pero para un Integer
> >
> > Ej; SELECT * FROM Tabla1 WHERE Id_Tabla1 = TODOS And Id_Destino = 2
> >
> > El tema del TODOS es no se que poner para que me traiga TODOS los
valores,
> > lo que necesito es que funcione como se fuese:
> >
> > SELECT * FROM Tabla1 WHERE Id_Destino = 2
> >
> > Pero el tema que lo unico que puedo tocar de la consulta es la Variable
> > TODOS.
> >
> > Desde ya muchas gracias.
> >
> > Saludos, Diego
> >
> >
> >
> >



Respuesta Responder a este mensaje
#7 DiegoC
28/04/2005 - 19:31 | Informe spam
ESPECTACULAR !!!

Muchas gracias, pongo manos a la obra.

Saludos, Diego

"Alejandro Mesa" escribió en el
mensaje news:
Diego,

Tienes varias soluciones. Cual usar?, eso depende de si la columna
[id_division] permite valores nulos o no, asi como de que exista algun


indice
por esta columna, pues a la final se trata de encontrar una solucion


optima
en caso de que se pueda.
Lo primero que te recomiendo es que no construyas la sentencia de esa


forma
(dinamicamente en la aplicacion cliente), pues me inmagino que hayas oido
hablar sobre la inyeccion de codigo hacia sql server, asi como de los
benificios de usar procedimientos almacenados), sino que crees un
procedimiento almacenado que haga una busqueda dinamica basada en los


valores
pasados a sus parametros.

Veamos un ejemplo, supongamos que queremos selecionar una orden o todas
basado en el valor del parametro @orderid. La columna orderid de la tabla
orders en la bd northwind, no acepta valores nulos, los valores son


mayores
que cero y ademas la tabla tiene un indice por esa columna

use northwind
go

create procedure dbo.usp_proc1
@orderid int = null
as
set nocount on

declare @min_int int, @max_int int

set @min_int = 1
set @max_int = 2147483647

select orderid, orderdate, customerid
from dbo.orders
where orderid between coalesce(@orderid, @min_int) and coalesce(@orderid,
@max_int)

return @@error
go

si llamamos a este procedimiento con un valor, por ejemplo 10250, nos
devolvera la informacion de la orden 10250, pero si no pasamos un valor o
pasamos null, entonces nos devolvera la informacion de todas las ordenes
existentes.

exec dbo.usp_proc1 @orderid = 10250
exec dbo.usp_proc1 @orderid = null
exec dbo.usp_proc1
go

Ahora puedes crear un objeto de tipo adodb.command, asignar el valor TRUE


a
la propiedad propiedad NamedParameters y agregar los parametros a la
coleccion de parametros en base a si la variable Variable1 tiene valor o


no.

Aca te paso un link a un estupendo articulo que habla sobre el uso de
condiciones de busqueda dinamicas en t-sql.

Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html


AMB

"DiegoC" wrote:

> Hola Alejandro,
>
> El tema es que estoy armando unas consultas a travez de VB, y las


consultas
> quedan algo asi:
>
> sql = "Select E.Id_Prestaciones, E.Descripcion, D.Division From Estudios


E
> Left Join Divisiones D On E.Id_Division = D.Id_Division Where


E.Id_Division
> = " & Variable1 & " And E.Id_Destino = " & Variable2
> Coneccion.Execute sql
>
> Mientras las Variables tengan un Codigo de Filtrado no hay problema, el
> problema es cuando por Ej:
> La Variable1 no tiene Valor porque en ese momento no lo quieren filtrar


por
> ese campo, sino que quieren TODOS, y si filtrar con la Variable2. O
> viseversa.
>
> Es por eso que querria saber que poner en la Variable para que cuando no
> quieran usar ese filtro me traiga todos.
>
> Desde ya muchas gracias, Diego
>
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > DiegoC,
> >
> > Para hacer lo que quieres debes cambiar la clausula WHERE, pues no


existe
> > wildchar para el operador de igualdad.
> >
> >
> > AMB
> >
> > "DiegoC" wrote:
> >
> > > Como puedo hacer para que la siguiente consulta me traiga TODOS los
> valores
> > > como si fuese un LIKE '%' pero para un Integer
> > >
> > > Ej; SELECT * FROM Tabla1 WHERE Id_Tabla1 = TODOS And Id_Destino = 2
> > >
> > > El tema del TODOS es no se que poner para que me traiga TODOS los
> valores,
> > > lo que necesito es que funcione como se fuese:
> > >
> > > SELECT * FROM Tabla1 WHERE Id_Destino = 2
> > >
> > > Pero el tema que lo unico que puedo tocar de la consulta es la


Variable
> > > TODOS.
> > >
> > > Desde ya muchas gracias.
> > >
> > > Saludos, Diego
> > >
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida