PDA

Ver la Versión Completa : Consulta en sql con la sentencia IN?


danytorres
17-09-2003, 22:25:57
Hola a todos los del foro. Tengo una duda en cuanto a una sentencia de un procedimiento almacenado el codigo en sql es el siguiente:

code sin parametro
_____________________________________
ALTER PROCEDURE TrakingSalida

as
SELECT Guia.OficinaDestino, Guia.CiudadOrigen, Paquete.NumeroRelacion, Paquete.UbicacionPaquete, Paquete.EstadoPaquete, Paquete.CodigoPaquete,
Guia.TotalPeso, Guia.TipoDeEnvio, Guia.Codigo
FROM Guia FULL OUTER JOIN
Paquete ON Guia.Codigo = Paquete.CodigoGuia
WHERE (Guia.OficinaDestino IN ('venezuela', 'españa', 'argentina', 'peru'))
______________________________________

Este codigo si me funciona el detalle esta cuando quiero pasarle el parametro

code Com parametro
_____________________________________
ALTER PROCEDURE TrakingSalida
@OficinaDestino varchar(20)
as
SELECT Guia.OficinaDestino, Guia.CiudadOrigen, Paquete.NumeroRelacion, Paquete.UbicacionPaquete, Paquete.EstadoPaquete, Paquete.CodigoPaquete,
Guia.TotalPeso, Guia.TipoDeEnvio, Guia.Codigo
FROM Guia FULL OUTER JOIN
Paquete ON Guia.Codigo = Paquete.CodigoGuia
WHERE (Guia.OficinaDestino IN (@OficinaDestino))
______________________________________

El parametro lo tengo a traves de un edit

Datamodule2.TrakingSalida.Close;
Datamodule2.TrakingSalida.Parameters[1].Value:=Edit1.Text;
Datamodule2.TrakingSalida.Open;

en el edit escribo lo mismo que en el codigo anterio 'venezuela', 'españa', 'argentina', 'peru' y no funciona mi pregunta es como escribo la lista? ayuda.

__________________________________
Un saludo a todos....

delphi.com.ar
17-09-2003, 22:30:13
Si mal no te entendí, vas a tener que tener tantos parámetros como items dentro del paréntesis
WHERE Guia.OficinaDestino IN (:P1, :P2, :P3, :P3)
O armar el sql como un string, por lo que tienes que tener muy en cuenta la conversión de los diferentes tipos de datos.

Saludos!

danytorres
17-09-2003, 22:35:17
Gracias por responder delphi.com.ar. lo que trato de hacer es que con un solo parametro armo un string 'venezuela', èspaña'.

Lo que tu me dices es que por ciuda debo tener declarado un parametro en mi procedimiento almacenado. pero el problema es que es muy variable por que aveses necesito realizar busquelas por 2 paises o por 8 o mas. como hago?

delphi.com.ar
17-09-2003, 22:52:57
Posteado originalmente por delphi.com.ar
...armar el sql como un string, por lo que tienes que tener muy en cuenta la conversión de los diferentes tipos de datos....


PD: Si mal no recuerdo hay un tipo de parámetro del tipo array, el cual desconozco, dudo de que sirva para esto, pero te recomiendo investigarlo.

Saludos!

Aprendiz
18-09-2003, 09:21:00
Hola.

Yo lo que haría es pasarle una sola ciudad cada vez y utilizar el SP como una tabla, que puedes incluir en el from, de una consulta en la que haría la selección, y que llamaría directamente desde mi aplicación.

Ejemplo:


ALTER PROCEDURE TrakingSalida
@OficinaDestino varchar(20)
as
SELECT Guia.OficinaDestino, Guia.CiudadOrigen, Paquete.NumeroRelacion, Paquete.UbicacionPaquete, Paquete.EstadoPaquete, Paquete.CodigoPaquete,
Guia.TotalPeso, Guia.TipoDeEnvio, Guia.Codigo
FROM Guia FULL OUTER JOIN
Paquete ON Guia.Codigo = Paquete.CodigoGuia
WHERE (Guia.OficinaDestino IN (@OficinaDestino))

SUSPEND;


SQL:


SELECT TS.*
FROM TRAKINGSALIDA TS
WHERE TS.OFICINADESTINO IN ('VENEZUELA','PERU')


La parte del WHERE de esta consulta la puedes construir directamente por código y así podrás hacerla del tamaño que quieras.

Saludos

danytorres
18-09-2003, 15:09:36
Gracias por responder aprendiz. como hago para pasarle el codigo del Where al SP?

Aprendiz
23-09-2003, 13:12:14
Creo que no lo necesitas, tal como te he planteado la consulta desde la parte en delphi al pasarselo directamente en el IN de la consulta el ya lo iría recogiendo y pasandolo como parámetro uno a uno al SP.

En caso que no funcionase, no tengo experiencia con el gestor que utilizas, puedes hacer la llamada pasándole el parámetro en el where de la consulta, si hubiese más de uno de construyes dinámicamente la parte del where en la consulta (no en el SP). El objetivo es pasar un solo parámetro cada vez al SP.

Original:


WHERE TS.OFICINADESTINO IN ('VENEZUELA','PERU')


En caso que no funcione así directamente, posible Solución:


WHERE TS.OFICINADESTINO('VENEZUELA') or TS.OFICINADESTINO('PERU')


Esta parte te la construirias dinámicamente desde el programa en Delphi.

Saludos