Boletín mugperu Digital - Julio 2009!
  Search 
Monday, May 21, 2012 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Arrays en SQL 2000
Prev Next
You are not authorized to post a reply.

Author Messages
emiaj
Posts:157

11/05/2005 10:27 AM  
Hola amigos del mug....kisiera preguntarles si en sql hay alguna forma de trabajar kon arrays....lo ke pasa es ke tengo un modulo ke ejecuta una consulta ke debe aceptar entre 0 y mas condiciones (filtrar por cliente a,b,c,d,e y por empresas x,y,z)....lo ke kiero es tratar estos parametros komo si fueran un array...se ke puedo hacerlo kon el execute (execute 'sql statment') pero kisiera saber si es posible trabajar estos parametros komo arrays....
bytes
rcrbalcazar
Posts:130

11/05/2005 12:01 PM  

Hola, te dire que no puedes manejar Arreglos en SQL, en tal caso lo que puedes hacer es enviar la cadena valores de clientes separados por comas y tambien la cadena de empresas separadas por comas (claro, ambas cadenas como dos paranetros a tu SP) y luego trabajar las cadenas para que realices las validacion correspondientes.

El ejemplo con el codigo para este tratamiento lo tienes en el foro de Visual Basic .Net, Thead: Insercion en Capa de Negocio.

Saludos.


Richard Rodriguez
Wilphi.Net
Posts:5

13/05/2005 12:21 PM  

lo que puedes hacer es crear tablas temporales locales en sql server, luego insertar en la tabla, asumiendo que has creado la tabla, crea tu procedimiento almacenado para realizar las operaciones, luego al terminar el procedimiento eliminas la tabla temporal.

Create Table #TablaTemp (CampoN int)

Insert Into #TablaTemp Values (1)

Insert Into #TablaTemp Values (2)

Drop Table #Tabla_Temp

recuerda que las tablas temporales locales se crean para cada instancia o para cada conexion ala BD.

 

rcrbalcazar
Posts:130

13/05/2005 04:56 PM  

Solo para agregar un detalle con respecto al uso de tablas temporales en SQL.

Si estan trabajando con una version de SQL Server inferior a SQL2k entonces usen tablas temporales (pero ojo con abusar de ellas)

Si estan trabajando con SQL2k o superior es mucho mejor usar la declaracion de variables de tipo Table, es lo mismo que una tabla temporal pero en memoria y como sabran esto es mucho mas rapido, pero una vez mas no deben abusar del uso de tablas temporales.

Saludos.


Richard Rodriguez
emiaj
Posts:157

15/05/2005 05:37 PM  

Bueno primero agradesco sus respuestas...pero les cuento ke enkontre algo ke me pudo dar la luz a mi problema....les cuento el problema de nuevo y komo lo solucione (mejor dicho komo me ayudaron a solucionarlo)....aki les va...

tengo un checkboxlist donde un usuario selecciona los items ke kiere ke filtre la columna...podriamos decir ke es algo asi:

Productos

<aki iria un checkbox> Producto A
<aki iria un checkbox> Producto B  
<aki iria un checkbox> Producto C
<aki iria un checkbox> Producto N

Luego de seleccionar los items para el reporte..entonces estos ids se mandan al servidor y se konstruye el t-sql para selecconar los items ke tengan esos valores...

vb net:

dim parametro as string=string.empty

for i as integer to chklist.items.count -1

if chklist.items(i).selected then

parametro+="''" + chklist.item(i).text + "'',"

end if

next i

if parametro.lenght>0 then

parametro=parametro.substring(0,parametro.lenght-1)

end if

tons ya tengo los items seleccionados.....

por ejemplo si seleccionaba los 2 primeros tendria algo asi:

parametro="''Producto A'',''Producto B''"

luego mi store seria:

@nombres nvarchar(4000)

exec 'select * from productos where nombre in (' + @nombres  + ')'

bueno esto funciona muy bien pero me parecia un poko inmanejable...lo ke keria era pasar el parametro kon mas naturalidad sin hacer tanto codigo....

komo ke el parametro kedara asi:

parametro="Producto A, Producto B"

y listo....asi ke aki esta la solucion....primero la funcion ke les mostrare luego krea la tabla temporal kon los items del string (algo asi komo el split del net)...y devuelve un objeto tabla kon estas palabras komo si fueran una fila de una tabla....

tons haria esto en mi sp:

declare @nombres  nvarchar(4000)

select * from productos where nombres in (select name from iter_charlist_to_table(@nombres  ,','))....

y listo...bueno diskulpen lo extenso y kizas aburrido...pero el ke kiera puede intentarlo...salu2..mas abajo la funcion...aki la pagina http://www.sommarskog.se/arrays-in-sql.html

 

CREATE FUNCTION iter_charlist_to_table
                    (@list      ntext,
                     @delimiter nchar(1) = N',')
         RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL,
    ≈nbsp;                        str     varchar(4000),
                             nstr    nvarchar(2000)) AS

   BEGIN
      DECLARE @pos      int,
              @textpos  int,
              @chunklen smallint,
              @tmpstr   nvarchar(4000),
              @leftover nvarchar(4000),
              @tmpval   nvarchar(4000)

      SET @textpos = 1
      SET @leftover = ''
      WHILE @textpos <= datalength(@list) / 2
      BEGIN
         SET @chunklen = 4000 - datalength(@leftover) / 2
         SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen)
         SET @textpos = @textpos + @chunklen

         SET @pos = charindex(@delimiter, @tmpstr)

         WHILE @pos > 0
         BEGIN
            SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
            INSERT @tbl (str, nstr) VALUES(@tmpval, @tmpval)
            SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
            SET @pos = charindex(@delimiter, @tmpstr)
         END

         SET @leftover = @tmpstr
      END

      INSERT @tbl(str, nstr) VALUES (ltrim(rtrim(@leftover)), ltrim(rtrim(@leftover)))
   RETURN
   END

You are not authorized to post a reply.
Forums > Temas de Interés > General .NET > Arrays en SQL 2000



ActiveForums 3.7
        
Copyright 2001-2012 MUGPERU   Terms Of Use  Privacy Statement