CONSULTA COMPLEJA

08/11/2004 - 17:59 por CCALLOQUISPE PALOMINO | Informe spam
HOLA:


CUANDO REALIZO LA SIGUUIENTE CONSULTA:

declare @numero decimal(5,0)
declare @contador decimal(15,0)
declare @cadenaa varchar(200)
declare @cadenab varchar(200)
declare @campoa varchar(300)
declare @campob varchar(300)
declare @consulta_sql nvarchar(500)
declare @cod_produ as varchar(20)
declare @tipo_p as varchar(1)
declare @tipo_r as varchar(1)

set @numero=3

set @contador=1
set @cadenaa=''
set @cadenab=''
set @cod_produ='1'
set @tipo_p='P'
set @tipo_r='R'

while (@contador<=@numero)

begin

if len(@contador)=1

begin

set @campoa= 'a.' + 'can' + '0' + cast(@contador as varchar(100))
set @campob= 'b.' + 'can' + '0' + cast(@contador as varchar(100))

end
else

begin

set @campoa='a.' + 'can' + cast(@contador as varchar(100))
set @campob='b.' + 'can' + cast(@contador as varchar(100))
end


if @contador=1

begin

set @cadenaa=@cadenaa + @campoa + ' + '
set @cadenab=@cadenab + @campob + ' + '

end

else

begin

set @cadenaa=@cadenaa + @campoa + ' + '
set @cadenab=@cadenab + @campob + ' + '

end

set @contador =@contador + 1
end

set @cadenaa=substring(@cadenaa,1, len(@cadenaa)-1)
print @cadenaa
set @cadenab=substring(@cadenab,1, len(@cadenab)-1)
print @cadenab
set @consulta_sql=''
set @consulta_sql= 'select a.codigo, (' + @cadenaa + ') - (' + @cadenab +
') from producto a, producto b ' + ' where a.codigo='
+ @cod_produ + ' and a.codigo=b.codigo and a.tipo=' + @tipo_p + ' and
b.tipo=' + @tipo_r

print @consulta_sql



execute sp_executesql @consulta_sql

me sale el siguiente error:


Servidor: mensaje 207, nivel 16, estado 3, línea 1
El nombre de columna 'P' no es válido.
Servidor: mensaje 207, nivel 16, estado 1, línea 1
El nombre de columna 'R' no es válido.

yo deseo
que la parte

a.codigo='P'
que aparezca asi pero solamente
sale
a.codigo=P
como haria para que apareciera solamente
a.codigo='P'
como puedo hacer

muchas gracias


CCALLOQUISPE
 

Leer las respuestas

#1 ulises
08/11/2004 - 19:21 | Informe spam
Usa doble comilla ('') para imcluir una comilla dentro de
la cadena de caractres, pero mejor aún normaliza tus tablas
y verás que no es necesario el sql dinámico.

Saludos,
Ulises

HOLA:


CUANDO REALIZO LA SIGUUIENTE CONSULTA:

declare @numero decimal(5,0)
declare @contador decimal(15,0)
declare @cadenaa varchar(200)
declare @cadenab varchar(200)
declare @campoa varchar(300)
declare @campob varchar(300)
declare @consulta_sql nvarchar(500)
declare @cod_produ as varchar(20)
declare @tipo_p as varchar(1)
declare @tipo_r as varchar(1)

set @numero=3

set @contador=1
set @cadenaa=''
set @cadenab=''
set @cod_produ='1'
set @tipo_p='P'
set @tipo_r='R'

while (@contador<=@numero)

begin

if len(@contador)=1

begin

set @campoa= 'a.' + 'can' + '0' + cast(@contador as


varchar(100))
set @campob= 'b.' + 'can' + '0' + cast(@contador as


varchar(100))

end
else

begin

set @campoa='a.' + 'can' + cast(@contador as varchar(100))
set @campob='b.' + 'can' + cast(@contador as varchar(100))
end


if @contador=1

begin

set @cadenaa=@cadenaa + @campoa + ' + '
set @cadenab=@cadenab + @campob + ' + '

end

else

begin

set @cadenaa=@cadenaa + @campoa + ' + '
set @cadenab=@cadenab + @campob + ' + '

end

set @contador =@contador + 1
end

set @cadenaa=substring(@cadenaa,1, len(@cadenaa)-1)
print @cadenaa
set @cadenab=substring(@cadenab,1, len(@cadenab)-1)
print @cadenab
set @consulta_sql=''
set @consulta_sql= 'select a.codigo, (' + @cadenaa + ') -


(' + @cadenab +
') from producto a, producto b ' + ' where a.codigo='
+ @cod_produ + ' and a.codigo=b.codigo and a.tipo=' +


@tipo_p + ' and
b.tipo=' + @tipo_r

print @consulta_sql



execute sp_executesql @consulta_sql

me sale el siguiente error:


Servidor: mensaje 207, nivel 16, estado 3, là­nea 1
El nombre de columna 'P' no es và¡lido.
Servidor: mensaje 207, nivel 16, estado 1, là­nea 1
El nombre de columna 'R' no es và¡lido.

yo deseo
que la parte

a.codigo='P'
que aparezca asi pero solamente
sale
a.codigo=P
como haria para que apareciera solamente
a.codigo='P'
como puedo hacer

muchas gracias


CCALLOQUISPE
.

Preguntas similares