Stored Procedure con lista de elementos

14/05/2004 - 21:08 por Enzo Marinelli | Informe spam
Hola a todos,

Necesito hacer un stored procedure al cual le pase dos
parámetros, cada uno de los cuales es una lista de números
enteros separados por comas.

Necesito que los números del primer parámetro los meta en
una lista, y los del segundo en otra.

Lo que necesito es poder "parsear" los elementos de cada
lista y hacer un "for" para poder insertar cada elemento,
como una transacción.

En pseudoSQL, esto es más o menos lo que quiero hacer:

MiStoredProcedure (@ListaA AS VARCHAR(100), @ListaB AS
VARCHAR(100))

AS

BEGIN TRAN
DECLARE
@ElementoA() AS SPLIT(@ListaA, ","),
@ElementoB() AS SPLIT(@ListaB, ","),
@I int

FOR @I = 0 TO @ElementoA.Length()
INSERT INTO MiTablaA (MiColumna) VALUES (@ElementoA
(@I))
NEXT

FOR @I = 0 TO @ElementoB.Length()
INSERT INTO MiTablaB (MiColumna) VALUES (@ElementoB
(@I))
NEXT

IF (@@ERROR <> 0)
ROLLBACKTRAN
ELSE
COMMIT TRAN

Sé que esto para nada es lenguaje SQL... es una mezcla
entre VB y SQL, pero es para aclarar lo que necesito
hacer. Muchas gracias.
 

Leer las respuestas

#1 ulises
15/05/2004 - 01:01 | Informe spam
Te podría servir el siguiente ejemplo :

create table tempocadena ( campo varchar(10) )
go
DECLARE @delimitador char(1)
DECLARE @cadena varchar(4000)
DECLARE @cadenaaux varchar(4000)
DECLARE @segmento varchar(1000)
DECLARE @posicion int
DECLARE @secuencia int
SET @cadena = '1,2,3,4,5,6,7,8'
SET @delimitador = ','
SET @cadenaaux = @cadena
SET @posicion = CHARINDEX(@delimitador,@cadenaaux,1)
WHILE ( @posicion > 0 )
BEGIN
SET @segmento = SUBSTRING(@cadenaaux,1,@posicion-1)
INSERT INTO tempocadena VALUES ( @segmento )
SET @cadenaaux = SUBSTRING(@cadenaaux,@posicion +
1,4000)
SET @posicion = CHARINDEX(@delimitador,@cadenaaux,1)
END
IF @cadenaaux <> '' INSERT INTO tempocadena VALUES (
@cadenaaux )
go
select * from tempocadena

resultado :

campo
-
1
2
3
4
5
6
7
8

(8 row(s) affected)

Saludos,
Ulises

Hola a todos,

Necesito hacer un stored procedure al cual le pase dos
parámetros, cada uno de los cuales es una lista de


números
enteros separados por comas.

Necesito que los números del primer parámetro los meta en
una lista, y los del segundo en otra.

Lo que necesito es poder "parsear" los elementos de cada
lista y hacer un "for" para poder insertar cada elemento,
como una transacción.

En pseudoSQL, esto es más o menos lo que quiero hacer:

MiStoredProcedure (@ListaA AS VARCHAR(100), @ListaB AS
VARCHAR(100))

AS

BEGIN TRAN
DECLARE
@ElementoA() AS SPLIT(@ListaA, ","),
@ElementoB() AS SPLIT(@ListaB, ","),
@I int

FOR @I = 0 TO @ElementoA.Length()
INSERT INTO MiTablaA (MiColumna) VALUES (@ElementoA
(@I))
NEXT

FOR @I = 0 TO @ElementoB.Length()
INSERT INTO MiTablaB (MiColumna) VALUES (@ElementoB
(@I))
NEXT

IF (@@ERROR <> 0)
ROLLBACKTRAN
ELSE
COMMIT TRAN

Sé que esto para nada es lenguaje SQL... es una mezcla
entre VB y SQL, pero es para aclarar lo que necesito
hacer. Muchas gracias.
.

Preguntas similares