Duda con With

04/04/2008 - 20:06 por Guillermo Peralta | Informe spam
Hola que tal;
Intento hacer algo parecido a lo siguiente:

Create procedure Prueba

as

begin

declare @Condicion int

set @Condicion = 1

;

With T

as

(

Select * from Tabla

)

if @Modo = 1

Select * from T where <...Condicion1...>

if @Modo = 2

Select * from T where <...Condicion2...>

end



De esta manera no lo puedo realizar, existe alguna otra forma sin recurrir a
la creacion de una tabla temporal dentro del SP?

Utilizo SQL Server 2005 Express



Gracias


Saludos
Guillermo
AG - CBA - ARG

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
04/04/2008 - 20:43 | Informe spam
On 4 apr, 20:06, "Guillermo Peralta"
wrote:
Hola que tal;
Intento hacer algo parecido a lo siguiente:

Create procedure Prueba

as

begin

declare @Condicion int

set @Condicion = 1

;

With T

as

(

Select * from Tabla

)

if @Modo = 1

Select * from T where <...Condicion1...>

if @Modo = 2

Select * from T where <...Condicion2...>

end

De esta manera no lo puedo realizar, existe alguna otra forma sin recurrir a
la creacion de una tabla temporal dentro del SP?




Guillermo,

Las dos consultas las puedes combinar en una.

Select *
from T
where (@Modo = 1 AND <...Condicion1...> ) OR (@Modo = 2 AND
<...Condicion2...>)

Saludos,
carlos
Respuesta Responder a este mensaje
#2 Guillermo Peralta
04/04/2008 - 21:28 | Informe spam
Gracias Carlos, pero no es lo que necesito...
A ver.. la situación es que tengo hasta 6 o 7 condiciones dentro del SP y se
dificulta la lectura/mantenimiento.

La Situación es

If @Condicion = 1
Select * from Tablas con VariosJoins
Where MuchasIgualesCondiciones
and SoloCambiaCondicion1

If @Condicion = 2
Select * from Tablas con VariosJoins
Where MuchasIgualesCondiciones
and SoloCambiaCondicion2

If @Condicion = 3
Select * from Tablas con VariosJoins
Where MuchasIgualesCondiciones
and SoloCambiaCondicion3

Por eso pensaba en una situacion como el origen del mensaje, pero no
quisiera tener que llegar a crear una tabla temporal..

Espero haber clarificado bien el ejemplo :)

Saludos
Guillermo
AG - CBA - ARG


"Carlos M. Calvelo" escribió en el mensaje
news:
On 4 apr, 20:06, "Guillermo Peralta"
wrote:
Hola que tal;
Intento hacer algo parecido a lo siguiente:

Create procedure Prueba

as

begin

declare @Condicion int

set @Condicion = 1

;

With T

as

(

Select * from Tabla

)

if @Modo = 1

Select * from T where <...Condicion1...>

if @Modo = 2

Select * from T where <...Condicion2...>

end

De esta manera no lo puedo realizar, existe alguna otra forma sin
recurrir a
la creacion de una tabla temporal dentro del SP?




Guillermo,

Las dos consultas las puedes combinar en una.

Select *
from T
where (@Modo = 1 AND <...Condicion1...> ) OR (@Modo = 2 AND
<...Condicion2...>)

Saludos,
carlos
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
04/04/2008 - 22:23 | Informe spam
Hola Guillermo,

On 4 apr, 21:28, "Guillermo Peralta"
wrote:
Gracias Carlos, pero no es lo que necesito...
A ver.. la situación es que tengo hasta 6 o 7 condiciones dentro del SP y se
dificulta la lectura/mantenimiento.

La Situación es

If @Condicion = 1
Select * from Tablas con VariosJoins
Where MuchasIgualesCondiciones
and SoloCambiaCondicion1

If @Condicion = 2
Select * from Tablas con VariosJoins
Where MuchasIgualesCondiciones
and SoloCambiaCondicion2

If @Condicion = 3
Select * from Tablas con VariosJoins
Where MuchasIgualesCondiciones
and SoloCambiaCondicion3

Por eso pensaba en una situacion como el origen del mensaje, pero no
quisiera tener que llegar a crear una tabla temporal..

Espero haber clarificado bien el ejemplo :)




Pues así si que se complica la cosa. Lo primero que se me ocurre
es que tienes que repetir el WITH T AS (...) dentro de todos los
IF's. Para evitar repetición, la expesión en el WITH puede ser
una consulta sobre una vista o una función o el resultado de otro
procedimiento almacenado.

Pero, yo así de primeras te digo que para eso están las vistas.

Utilizando el mismo estilo que tu arriba:

Vista0:
select * from Tablas con VariosJoins
Where MuchasIgualesCondiciones

Vista1:
select * from Vista0 con OtrosJoins1
Where Condicion1

Vista2:
select * from Vista0 con OtrosJoins2
Where Condicion2

Vista3:
select * from Vista0 con OtrosJoins3
Where Condicion3

...

VistaY:
select * from VistaX con OtrosJoinsY
Where CondicionesY

OtrosJoinsY pueden ser a su vez otras vista y/o funciones.

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 Guillermo Peralta
04/04/2008 - 23:10 | Informe spam
Me parece una buena opción el empleo de la vista, lo analizare y ver si lo
puedo aplicar a mi caso.
Te lo agradezco.

Hasta luego!
Saludos
Guillermo
AG - CBA - ARG
Respuesta Responder a este mensaje
#5 jsantosr2001
09/04/2008 - 16:40 | Informe spam
On 4 abr, 16:10, "Guillermo Peralta"
wrote:
Me parece una buena opción el empleo de la vista, lo analizare y ver si lo
puedo aplicar a mi caso.
Te lo agradezco.

Hasta luego!
Saludos
Guillermo
AG - CBA - ARG




Guillermo, buenos días...

Espero que el siguiente código te sea de ayuda.


DECLARE @CondicionA int,
DECLARE @CondicionB varchar,
DECLARE @CondicionC datetime,
...

SELECT @Condicion = 1 -- O cualquier otro valor que defina la
consulta

SELECT @CondicionA = 100
SELECT @CondicionB = 'Nombre'
SELECT @CondicionC = '2008-04-09'


SELECT * FROM Tablas con VariosJoins
WHERE
(
(@Condicion = 1
AND
TablaX.Campocondicionx = @CondicionA
)
OR
(@Condicion <> 1
AND
TablaX.Campocondicionx = ValorFijoA
)
)
AND
(
(@Condicion = 2
AND
TablaY.Campocondiciony = @CondicionB
)
OR
(@Condicion <> 2
AND
TablaY.Campocondiciony = ValorFijoB
)
)
AND
(
(@Condicion = 3
AND
TablaZ.Campocondicionz = @CondicionC
)
OR
(@Condicion <> 3
AND
TablaZ.Campocondicionz = ValorFijoC
)
)
...


El valor de @condicion es el que indicará que expresiónes de la
cláusula WHERE se aplican
a la consulta.


Saludos desde México

Jesus De los Santos
Mty, México
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida