consulta con condiciones....

27/06/2006 - 19:40 por GoG | Informe spam
Hola a todos

tengo una consulta que me esta volviendo loco...

La consulta, que esta dentro de un SP es al estilo de :

'- lo que quiero hacer
@p1 varchar
@p2 varchar
@p3 varchar

Select c1,c2,c3 from .
where
if @p1<>'' c1=condicion
if @p2<>'' c2=condicion
'--
No se si se puede hacer lo anterior, o por lo menos me da errores de
sintaxis...

He intentado montarla haciendo

set @sql='select '

if @p1<>'' set @sql=@sql + ''

Pero el problema es que declaro @sql nvarchar(8000) excedo el tamaño maximo
de la variable

He intentado crear una vista, y hacer lo anterior pero me complica muchisimo
la vida.

Alguna sugenrecia pr favor??

Gracias.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
27/06/2006 - 19:56 | Informe spam
GoG,

where
if @p1<>'' c1=condicion
if @p2<>'' c2=condicion



Cual es la condicion?


AMB

"GoG" wrote:

Hola a todos

tengo una consulta que me esta volviendo loco...

La consulta, que esta dentro de un SP es al estilo de :

'- lo que quiero hacer
@p1 varchar
@p2 varchar
@p3 varchar

Select c1,c2,c3 from .
where
if @p1<>'' c1=condicion
if @p2<>'' c2=condicion
'--
No se si se puede hacer lo anterior, o por lo menos me da errores de
sintaxis...

He intentado montarla haciendo

set @sql='select '

if @p1<>'' set @sql=@sql + ''

Pero el problema es que declaro @sql nvarchar(8000) excedo el tamaño maximo
de la variable

He intentado crear una vista, y hacer lo anterior pero me complica muchisimo
la vida.

Alguna sugenrecia pr favor??

Gracias.




Respuesta Responder a este mensaje
#2 GoG
27/06/2006 - 20:04 | Informe spam
Imaginate, la consulta es algo asi como (no la apunto entera porque es
largisima)

'Parametros del SP
@NIF varchar0=''
@provincia varchar=''
@localidad varchar=''


@sql='Select NIf,direccion,provincia,'
@sql=@sql + ' where '

if @provincia<>'' @sql=@sql + ' provincia=' + @provincia + ' and '
if @localidad<>'' @sql=@sql + 'localidad=' + @localidad + ' and '

etc



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

> where
> if @p1<>'' c1=condicion
> if @p2<>'' c2=condicion

Cual es la condicion?


AMB

"GoG" wrote:

> Hola a todos
>
> tengo una consulta que me esta volviendo loco...
>
> La consulta, que esta dentro de un SP es al estilo de :
>
> '- lo que quiero hacer
> @p1 varchar
> @p2 varchar
> @p3 varchar
>
> Select c1,c2,c3 from .
> where
> if @p1<>'' c1=condicion
> if @p2<>'' c2=condicion
> '--
> No se si se puede hacer lo anterior, o por lo menos me da errores de
> sintaxis...
>
> He intentado montarla haciendo
>
> set @sql='select '
>
> if @p1<>'' set @sql=@sql + ''
>
> Pero el problema es que declaro @sql nvarchar(8000) excedo el tamaño


maximo
> de la variable
>
> He intentado crear una vista, y hacer lo anterior pero me complica


muchisimo
> la vida.
>
> Alguna sugenrecia pr favor??
>
> Gracias.
>
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
27/06/2006 - 20:42 | Informe spam
GoG,

1 - asegurate de poner la longitud en la declaracion de variables varchar,
de lo contrario sql server asumira que la longitud es 1

@provincia varchar=''
@localidad varchar=''



@provincia varchar(25) = '',
@localidad varchar(25) = ''

2 - Cuando armes la cadena que sera ejecutada por el procedimiento
sp_executesql, usa parametros y no concatenes los valores a la cadena.

set @sql='Select direccion,provincia,'
set @sql=@sql + ' where 1 = 1'

if @provincia > '' set @sql=@sql + N' and provincia = @provincia'
if @localidad > '' set @sql=@sql + N' and localidad = @localidad'

execute sp_executesql @sql, N'@provincia varchar(25), @localidad
varchar(25)', @provincia, @localidad
go

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

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


AMB

"GoG" wrote:

Imaginate, la consulta es algo asi como (no la apunto entera porque es
largisima)

'Parametros del SP
@NIF varchar0=''
@provincia varchar=''
@localidad varchar=''


@sql='Select NIf,direccion,provincia,'
@sql=@sql + ' where '

if @provincia<>'' @sql=@sql + ' provincia=' + @provincia + ' and '
if @localidad<>'' @sql=@sql + 'localidad=' + @localidad + ' and '

etc



"Alejandro Mesa" escribió en el
mensaje news:
> GoG,
>
> > where
> > if @p1<>'' c1=condicion
> > if @p2<>'' c2=condicion
>
> Cual es la condicion?
>
>
> AMB
>
> "GoG" wrote:
>
> > Hola a todos
> >
> > tengo una consulta que me esta volviendo loco...
> >
> > La consulta, que esta dentro de un SP es al estilo de :
> >
> > '- lo que quiero hacer
> > @p1 varchar
> > @p2 varchar
> > @p3 varchar
> >
> > Select c1,c2,c3 from .
> > where
> > if @p1<>'' c1=condicion
> > if @p2<>'' c2=condicion
> > '--
> > No se si se puede hacer lo anterior, o por lo menos me da errores de
> > sintaxis...
> >
> > He intentado montarla haciendo
> >
> > set @sql='select '
> >
> > if @p1<>'' set @sql=@sql + ''
> >
> > Pero el problema es que declaro @sql nvarchar(8000) excedo el tamaño
maximo
> > de la variable
> >
> > He intentado crear una vista, y hacer lo anterior pero me complica
muchisimo
> > la vida.
> >
> > Alguna sugenrecia pr favor??
> >
> > Gracias.
> >
> >
> >
> >



Respuesta Responder a este mensaje
#4 Jorge Gonzalez
27/06/2006 - 21:29 | Informe spam
GoG

Trata:

select c1, c2, c3
where ( @p1='' OR c1 = condicion ) and
( @p2='' OR c2 = condicion ) and ..

como podés ver, si @p1 ='' entonces la condición OR se hace verdadera
independentiemente del c1=condicion. Es decir, no toma en cuenta dicha
condición porque ya es verdadero que @p1=''. Pero si @p1 es distinto de ''
entonces por la naturaleza del OR quien decidirá si la condición es
verdadera será C1= condición, por tanto sólo se incluirá en la consulta los
que cumplan dicha condición.

Espero que esto te sirva.

saludos

Jorge González


"GoG" escribió en el mensaje
news:%
Hola a todos

tengo una consulta que me esta volviendo loco...

La consulta, que esta dentro de un SP es al estilo de :

'- lo que quiero hacer
@p1 varchar
@p2 varchar
@p3 varchar

Select c1,c2,c3 from .
where
if @p1<>'' c1=condicion
if @p2<>'' c2=condicion
'--
No se si se puede hacer lo anterior, o por lo menos me da errores de
sintaxis...

He intentado montarla haciendo

set @sql='select '

if @p1<>'' set @sql=@sql + ''

Pero el problema es que declaro @sql nvarchar(8000) excedo el tamaño
maximo
de la variable

He intentado crear una vista, y hacer lo anterior pero me complica
muchisimo
la vida.

Alguna sugenrecia pr favor??

Gracias.



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