In por parámetro

23/04/2010 - 05:26 por Julio Briceño | Informe spam
Saludos,

Tengo una aplicación que envía a un procedure un parametro varchar(8000) con
unos ids para consultar en una tabla

El procedure en la tabla descompone los campos lo mete en una tabla temporal
y hace una subconsulta, algo así

declare a varchar(8000)
select a = '1,2,3,4'

luego crea una tabla temporal que contendría algo como

valor
1
2
3
4

Para hacer un:

select * from tabla where id in(select valor from #tempo)

Pregunta.

Habrá forma de construir el sql dinámico con la propia variable...

Algo como

select * from tabla where id in(variablequevieneviaparametro)

???

Mucho agradecería la ayuda,

Julio C. Briceño R.

Preguntas similare

Leer las respuestas

#1 Julio Briceño
23/04/2010 - 05:49 | Informe spam
Me respondo yo mismo ya lo vi.

declare @expalum as varchar(800)
select @expalum = '03744, 02725, 08119, 02725'
declare @sql varchar(800)
set @sql = 'select * from alumnos where expalum in(' + @expalum + ')'
exec (@sql)


Para quien le pueda servir,

Gracias,





"Julio Briceño" wrote:


Saludos,

Tengo una aplicación que envía a un procedure un parametro varchar(8000) con
unos ids para consultar en una tabla

El procedure en la tabla descompone los campos lo mete en una tabla temporal
y hace una subconsulta, algo así

declare a varchar(8000)
select a = '1,2,3,4'

luego crea una tabla temporal que contendría algo como

valor
1
2
3
4

Para hacer un:

select * from tabla where id in(select valor from #tempo)

Pregunta.

Habrá forma de construir el sql dinámico con la propia variable...

Algo como

select * from tabla where id in(variablequevieneviaparametro)

???

Mucho agradecería la ayuda,

Julio C. Briceño R.




Respuesta Responder a este mensaje
#2 Toni
24/04/2010 - 17:15 | Informe spam
Te paso una función que me resultó muy util para resolver ese
problema, no es de mi autoría la encontré por ahi y la modifique.


Ejemplo para utilizarla:

declare @DATOS VARCHAR(8000)
set @DATOS = '1-2-3-4-5'

select *
from mi_tabla
where id in (select cast(valor as int) from dbo.VarcharToTabla(@DATOS,
'-'))


Lo bueno es que también podrias usarlo en un join, ej:

select *
from mi_tabla inner join
dbo.VarcharToTabla(@DATOS, '-') as TEMP on mi_tabla.id cast(TEMP.valor as int)


tabla
(
@DATO varchar(max)
,@separador char(1) = ','
)
RETURNS @TEMP TABLE (orden int, valor varchar(100))
AS
BEGIN

DECLARE @COUNT BIGINT
DECLARE @temp_value VARCHAR(100)

SET @COUNT = 1
WHILE LEN(@DATO) > 0
BEGIN
IF CHARINDEX(@separador,@DATO) = 0
BEGIN
SET @temp_value = @DATO
SET @DATO = ''
END ELSE
BEGIN
SET @temp_value = SUBSTRING(@DATO, 1, CHARINDEX(@separador,@DATO) -
1)
SET @DATO = SUBSTRING(@DATO,CHARINDEX(@separador,@DATO)+1,
LEN(@DATO))
END
INSERT INTO @TEMP (orden, valor)
VALUES (@COUNT, @temp_value)
SET @COUNT = @COUNT + 1
END

RETURN
END







"Julio Briceño" wrote:

> Saludos,

> Tengo una aplicación que envía a un procedure un parametro varchar(8000) con
> unos ids para consultar en una tabla

> El procedure en la tabla descompone los campos lo mete en una tabla temporal
> y hace una subconsulta, algo así

> declare a varchar(8000)
> select a = '1,2,3,4'

> luego crea una tabla temporal que contendría algo como

> valor
> 1
> 2
> 3
> 4

> Para hacer un:

> select * from tabla where id in(select valor from #tempo)

> Pregunta.

> Habrá forma de construir el sql dinámico con la propia variable...

> Algo como

> select * from tabla where id in(variablequevieneviaparametro)

> ???

> Mucho agradecería la ayuda,

> Julio C. Briceño R.- Ocultar texto de la cita -

- Mostrar texto de la cita -
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida