PDA

Ver la Versión Completa : Problema con entrecomillado en sentencia select in dentro de un Store Procedure


Caballero Negro
11-01-2007, 21:10:04
Despues de hacer un cursor tengo un resultado con uno o varios registros.
056
004
057
Cabe decir que estos valores son alfanumericos.

Tengo una cadena dentro del stored que almacena los registros encontrados de la siguiente forma
'056','004','057'

El motivo de esta cadena es poder efectuar la siguiente consulta
select valor in ( @cadena ) from tabla

El problema se encuentra cuando asigno el entrecomillado a los valores de @cadena ya que al efectuar la consulta dentro del stored con select valor in ( @cadena ) from tabla, no presenta ningun valor.

Si asigno en el select la siguiente sentencia:
select valor in ( '056','004','057') from tabla
la consulta se hace correctamente.

El proceso de asignacion de las comillas a la cadena es el siguiente:
open Resultados
Fetch next from Resultados into @CadenaTemp
while @@FETCH_STATUS = 0
begin
set @contador = @contador + 1
set @cadena = @cadena +''''+@CadenaTemp+''''
if @contador < @Limite
begin
set @cadena = @cadena +','
end
Fetch next from Resultados into @IDRuta01str
end
close Resultados
deallocate Resultados

No quiero hacer un query mas complicado que lo arriba mostrado, ya que el select... in () es mas que suficiente para lo que se desea.
El problema es como armar correctamente el valor de @Cadena dentro de Stored Procedure.

Agradeciendo de antemano la ayuda a este "pequeño" problema les mando un afectuoso saludo a toda la comunidad de Club Delphi.

droguerman
11-01-2007, 21:24:45
si efectuas eso el SELECT buscará un valor que sea igual a @cadena
podrias hacer lo siguiente a cada valor le antecedes un caracter extraño por ejemplo ! es decir @cadena sería igual a: !056!004!057
luego tu sentencia seria algo asi como
[/SQL]
SELECT * FROM tabla where CHARINDEX(@cadena, '!056')>0;
[/SQL]

suerte :p

sinalocarlos
12-01-2007, 02:25:14
Buen dia

tiene que ser un IN sobre una cadena?

no podria ser algo asi como

select campo1, campo2, campo3 from tutabla where
campo1 in (select otrocampo from otratabla where otrocampo2 = 'loquesa')

suponiendo que select otrocampo from otratabla where otrocampo2 = 'loquesea'
es la consulta que usas para armar el cursor y select campo1, campo2, campo3 from tutabla es lo que quieres regresar?

Caballero Negro
12-01-2007, 02:46:37
En efecto SinaloCarlos.

Le definicion de Sql aguanta perfectamente expresiones de consulta sobre la clausula IN.

Un amigo de la oficina me dio unos golpes en la cabeza para poder "ver lo evidente".

Me sucedio el sindrome del programador que trabaja con el tiempo encima.

De todas maneras gracias pro su apoyo.
Saludos!!!