Expresion como lista

21/11/2005 - 17:54 por Andrey | Informe spam
Hola Grupo...

Estoy tratando de pasarle a una consulta una lista de valores como una
expresion

pero no he podido armar la expresion de forma que el query de los resultador
y/o que la consulta quede bien armada.

algo como esto

pero no me da resultados.

Declare @campa varchar(6)
Declare @area Nvarchar(100)

set @campa='200517'
set @area='''010001'',''010002'''

set @area=rtrim(@area)

select * from tblzonas where strcodigo in(@area)

muchas gracias por su ayuda.

Preguntas similare

Leer las respuestas

#6 Andrey
21/11/2005 - 19:12 | Informe spam
Muchas Gracias Alejandro...

Revisare el link.
Excelente

"Alejandro Mesa" escribió:

Andrey,

aca te paso un link a un articulo sobre "como simular arreglos en t-sql". La
idea es pasar la lista a una funcion y devolver los elemntos de la lista en
una tabla. Tambien puedes pasar los elementos en un documento xml y usar la
funcion openxml para mapear ese documento como si fuese una tabla. Por
cierto, en el articulo encontraras el codigo de la funcion que devuelve una
tabla a partir de la lista.

Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html


AMB

"Andrey" wrote:

> Hola Grupo...
>
> Estoy tratando de pasarle a una consulta una lista de valores como una
> expresion
>
> pero no he podido armar la expresion de forma que el query de los resultador
> y/o que la consulta quede bien armada.
>
> algo como esto
>
> pero no me da resultados.
>
> Declare @campa varchar(6)
> Declare @area Nvarchar(100)
>
> set @campa='200517'
> set @area='''010001'',''010002'''
>
> set @area=rtrim(@area)
>
> select * from tblzonas where strcodigo in(@area)
>
> muchas gracias por su ayuda.
>
Respuesta Responder a este mensaje
#7 Andrey
21/11/2005 - 19:46 | Informe spam
Hola Guido...

te muestro lo que hice...

declare @area Nvarchar(100)
set @area='''010001'',''010002'''
select * FROM Web_Split @area, ''''
select * from mpv_com_terceros where strcodigozona IN (SELECT * FROM
Web_Split @area, '"')

logicamente ya cree la funcion...

pero me da este error y no se como interpretarlo, para corregirlo

Servidor: mensaje 170, nivel 15, estado 1, línea 4
Line 4: Incorrect syntax near '@area'.

Te agradeceria si me liberas la duda.



"Guido Catalano" escribió:

Podes usar esta funcion para q te cree una tabla a partir de la lista, luego
podés usar un
IN (SELECT * FROM Web_Split @area, '"')


CREATE FUNCTION dbo.Web_Split
(
@List nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(

Id int identity(1,1),
Value nvarchar(100)
)
AS
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List > Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into @RtnValue (Value)
Select Value = ltrim(rtrim(@List))

Return
END




Guido.-
"Andrey" escribió en el mensaje
news:
> Hola Grupo...
>
> Estoy tratando de pasarle a una consulta una lista de valores como una
> expresion
>
> pero no he podido armar la expresion de forma que el query de los
resultador
> y/o que la consulta quede bien armada.
>
> algo como esto
>
> pero no me da resultados.
>
> Declare @campa varchar(6)
> Declare @area Nvarchar(100)
>
> set @campa='200517'
> set @area='''010001'',''010002'''
>
> set @area=rtrim(@area)
>
> select * from tblzonas where strcodigo in(@area)
>
> muchas gracias por su ayuda.
>



Respuesta Responder a este mensaje
#8 Alejandro Mesa
21/11/2005 - 20:21 | Informe spam
Andrey,

Te recomiendo que le heches un vistazo al articulo del link, en el explican
varias formas de hacer la funcion y tambien comparan el rendimineto de las
distintas versiones.

En cuanto a tu error, las funciones deben ser llamadas con su parametros
entre parentezis.

select * from Web_Split (@area, ',')
go


AMB

"Andrey" wrote:

Hola Guido...

te muestro lo que hice...

declare @area Nvarchar(100)
set @area='''010001'',''010002'''
select * FROM Web_Split @area, ''''
select * from mpv_com_terceros where strcodigozona IN (SELECT * FROM
Web_Split @area, '"')

logicamente ya cree la funcion...

pero me da este error y no se como interpretarlo, para corregirlo

Servidor: mensaje 170, nivel 15, estado 1, línea 4
Line 4: Incorrect syntax near '@area'.

Te agradeceria si me liberas la duda.



"Guido Catalano" escribió:

> Podes usar esta funcion para q te cree una tabla a partir de la lista, luego
> podés usar un
> IN (SELECT * FROM Web_Split @area, '"')
>
>
> CREATE FUNCTION dbo.Web_Split
> (
> @List nvarchar(2000),
> @SplitOn nvarchar(5)
> )
> RETURNS @RtnValue table
> (
>
> Id int identity(1,1),
> Value nvarchar(100)
> )
> AS
> BEGIN
> While (Charindex(@SplitOn,@List)>0)
> Begin
> Insert Into @RtnValue (value)
> Select
> Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
> Set @List > > Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
> End
> Insert Into @RtnValue (Value)
> Select Value = ltrim(rtrim(@List))
>
> Return
> END
>
>
>
>
> Guido.-
> "Andrey" escribió en el mensaje
> news:
> > Hola Grupo...
> >
> > Estoy tratando de pasarle a una consulta una lista de valores como una
> > expresion
> >
> > pero no he podido armar la expresion de forma que el query de los
> resultador
> > y/o que la consulta quede bien armada.
> >
> > algo como esto
> >
> > pero no me da resultados.
> >
> > Declare @campa varchar(6)
> > Declare @area Nvarchar(100)
> >
> > set @campa='200517'
> > set @area='''010001'',''010002'''
> >
> > set @area=rtrim(@area)
> >
> > select * from tblzonas where strcodigo in(@area)
> >
> > muchas gracias por su ayuda.
> >
>
>
>
Respuesta Responder a este mensaje
#9 Andrey
21/11/2005 - 20:29 | Informe spam
Gracias Alejandro...

Ya estoy mirando el articulo...
lo que pasa es que como el ejemplo de guido, lo estaba probando.

El articulo es excelente.


"Alejandro Mesa" escribió:

Andrey,

Te recomiendo que le heches un vistazo al articulo del link, en el explican
varias formas de hacer la funcion y tambien comparan el rendimineto de las
distintas versiones.

En cuanto a tu error, las funciones deben ser llamadas con su parametros
entre parentezis.

select * from Web_Split (@area, ',')
go


AMB

"Andrey" wrote:

> Hola Guido...
>
> te muestro lo que hice...
>
> declare @area Nvarchar(100)
> set @area='''010001'',''010002'''
> select * FROM Web_Split @area, ''''
> select * from mpv_com_terceros where strcodigozona IN (SELECT * FROM
> Web_Split @area, '"')
>
> logicamente ya cree la funcion...
>
> pero me da este error y no se como interpretarlo, para corregirlo
>
> Servidor: mensaje 170, nivel 15, estado 1, línea 4
> Line 4: Incorrect syntax near '@area'.
>
> Te agradeceria si me liberas la duda.
>
>
>
> "Guido Catalano" escribió:
>
> > Podes usar esta funcion para q te cree una tabla a partir de la lista, luego
> > podés usar un
> > IN (SELECT * FROM Web_Split @area, '"')
> >
> >
> > CREATE FUNCTION dbo.Web_Split
> > (
> > @List nvarchar(2000),
> > @SplitOn nvarchar(5)
> > )
> > RETURNS @RtnValue table
> > (
> >
> > Id int identity(1,1),
> > Value nvarchar(100)
> > )
> > AS
> > BEGIN
> > While (Charindex(@SplitOn,@List)>0)
> > Begin
> > Insert Into @RtnValue (value)
> > Select
> > Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
> > Set @List > > > Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
> > End
> > Insert Into @RtnValue (Value)
> > Select Value = ltrim(rtrim(@List))
> >
> > Return
> > END
> >
> >
> >
> >
> > Guido.-
> > "Andrey" escribió en el mensaje
> > news:
> > > Hola Grupo...
> > >
> > > Estoy tratando de pasarle a una consulta una lista de valores como una
> > > expresion
> > >
> > > pero no he podido armar la expresion de forma que el query de los
> > resultador
> > > y/o que la consulta quede bien armada.
> > >
> > > algo como esto
> > >
> > > pero no me da resultados.
> > >
> > > Declare @campa varchar(6)
> > > Declare @area Nvarchar(100)
> > >
> > > set @campa='200517'
> > > set @area='''010001'',''010002'''
> > >
> > > set @area=rtrim(@area)
> > >
> > > select * from tblzonas where strcodigo in(@area)
> > >
> > > muchas gracias por su ayuda.
> > >
> >
> >
> >
Respuesta Responder a este mensaje
#10 Guido Catalano
21/11/2005 - 22:24 | Informe spam
Con los paréntesis sería algo así:

declare @area Nvarchar(100)
set @area='010001,010002' -- Pasamos un string, y usamos la coma como
separador


select * from mpv_com_terceros
where strcodigozona
IN (SELECT *
FROM Web_Split(@area, ',')
)


Prueba esto y comenta los resultados!
Guido.-


"Andrey" escribió en el mensaje
news:
Hola Guido...

te muestro lo que hice...

declare @area Nvarchar(100)
set @area='''010001'',''010002'''
select * FROM Web_Split @area, ''''
select * from mpv_com_terceros where strcodigozona IN (SELECT * FROM
Web_Split @area, '"')

logicamente ya cree la funcion...

pero me da este error y no se como interpretarlo, para corregirlo

Servidor: mensaje 170, nivel 15, estado 1, línea 4
Line 4: Incorrect syntax near '@area'.

Te agradeceria si me liberas la duda.



"Guido Catalano" escribió:

> Podes usar esta funcion para q te cree una tabla a partir de la lista,


luego
> podés usar un
> IN (SELECT * FROM Web_Split @area, '"')
>
>
> CREATE FUNCTION dbo.Web_Split
> (
> @List nvarchar(2000),
> @SplitOn nvarchar(5)
> )
> RETURNS @RtnValue table
> (
>
> Id int identity(1,1),
> Value nvarchar(100)
> )
> AS
> BEGIN
> While (Charindex(@SplitOn,@List)>0)
> Begin
> Insert Into @RtnValue (value)
> Select
> Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
> Set @List > > Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
> End
> Insert Into @RtnValue (Value)
> Select Value = ltrim(rtrim(@List))
>
> Return
> END
>
>
>
>
> Guido.-
> "Andrey" escribió en el mensaje
> news:
> > Hola Grupo...
> >
> > Estoy tratando de pasarle a una consulta una lista de valores como una
> > expresion
> >
> > pero no he podido armar la expresion de forma que el query de los
> resultador
> > y/o que la consulta quede bien armada.
> >
> > algo como esto
> >
> > pero no me da resultados.
> >
> > Declare @campa varchar(6)
> > Declare @area Nvarchar(100)
> >
> > set @campa='200517'
> > set @area='''010001'',''010002'''
> >
> > set @area=rtrim(@area)
> >
> > select * from tblzonas where strcodigo in(@area)
> >
> > muchas gracias por su ayuda.
> >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida