Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ayuda SP complejo.

Estas en el tema de Ayuda SP complejo. en el foro de SQL Server en Foros del Web. Buenos días amigos !!! Verán, tengo un código en VB que hemos de pasarlo a SP, pero tiene una cantidad de parámetros que he pensado ...
  #1 (permalink)  
Antiguo 28/10/2006, 03:53
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Ayuda SP complejo.

Buenos días amigos !!!

Verán, tengo un código en VB que hemos de pasarlo a SP, pero tiene una cantidad de parámetros que he pensado en una forma de mandarlos todos através de un bucle, pero no sé bien como hacerlo.

Verán, el codigo VB hace 40 inserts en un bucle, pero los valores de los inserts son dinámicos de una matriz la cual hace un cálculo apartir de la I del bucle. Es decir:
Código:
FOR i=0 TO 40
      hc(i) = "insert into hc values( matrizValores((350*23)*i), matrizValores((310*13)*i))
NEXT
En realidad hay más values en el insert, pero es para que se hagan una idea de la complejidad... (Una vez creadas las querys, se manda el array a una función que la recorre e iba haciendo los inserts, todo esto en VB)

Ahora, queremos mandar todos estos parametros a un SP y desde ahí ejecutar las querys, pero claro... serían 30 parámetros por 40 de las querys a realizar.

Por lo que he pensado en hacer algo asi:
Código:
FOR i=0 TO 40
     hcParametros = matrizValores((350*23)*i) & "," & matrizValores((310*13)*i
NEXT

Eso pensé meterlo en un @Parametro de tipo TEXT

Y lo que querría realizar ahora, espero me puedan ayudar es hacer como un SPLIT de la cadena, usando el separador "," y meter cada valor en un registro de una tabla temporal que solo tiene un campo denominado parametrosHc.

create table #temporalHc(parametrosHc as integer)
y ahora... ¿Como podría meter cada valor en la tabla?

En fin, espero haberme explicado y que puedan ayudarme. Un saludo.
__________________
Charlie.
  #2 (permalink)  
Antiguo 28/10/2006, 07:23
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
y no hay la posibilidad de hacer el proceso dentro del SP... es decir el ciclo de 40 iteraciones...???
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 29/10/2006, 06:09
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Ya está resuleto.

Cree una cadena con todos los parametros para meter, separados por "," y despues hice una función en SQL Server para hacer Split y listo.

Bueno, muchas gracias por todo. Un saludo a la gente y espero que mi respuesta les haya valido. Aqui les dejo la función Split de SQL Server:

Código:
CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))
RETURNS @Results TABLE (Items varchar(8000))
AS


    BEGIN
    DECLARE @INDEX INT
    DECLARE @SLICE varchar(8000)
    -- HAVE TO SET TO 1 SO IT DOESNT EQUAL Z
    --     ERO FIRST TIME IN LOOP
    SELECT @INDEX = 1
    -- following line added 10/06/04 as null
    --      values cause issues
    IF @String IS NULL RETURN
    WHILE @INDEX !=0


        BEGIN	
        	-- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER
        	SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)
        	-- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE
        	IF @INDEX !=0
        		SELECT @SLICE = LEFT(@STRING,@INDEX - 1)
        	ELSE
        		SELECT @SLICE = @STRING
        	-- PUT THE ITEM INTO THE RESULTS SET
        	INSERT INTO @Results(Items) VALUES(@SLICE)
        	-- CHOP THE ITEM REMOVED OFF THE MAIN STRING
        	SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)
        	-- BREAK OUT IF WE ARE DONE
        	IF LEN(@STRING) = 0 BREAK
    END
    RETURN
END
Saludos.
__________________
Charlie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:04.