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

#1 Gustavo Larriera [MVP]
21/11/2005 - 18:06 | Informe spam
Debes hacer una SQL dinámica, concatena el texto de tu consulta con la
variable que contiene la lista de valores y ejecuta el texto resultante en
forma dinámica.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Andrey" wrote in message
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
#2 Guido Catalano
21/11/2005 - 18:19 | Informe spam
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
#3 Alejandro Mesa
21/11/2005 - 18:34 | Informe spam
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
#4 Andrey
21/11/2005 - 19:10 | Informe spam
Mil Gracias Gustavo...



"Gustavo Larriera [MVP]" escribió:

Debes hacer una SQL dinámica, concatena el texto de tu consulta con la
variable que contiene la lista de valores y ejecuta el texto resultante en
forma dinámica.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Andrey" wrote in message
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
#5 Andrey
21/11/2005 - 19:11 | Informe spam
Muchas Gracias Guido...

Excelente tu ejemplo



"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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida