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.

Preguntas similare

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.
.

Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP SQL]
17/05/2004 - 02:58 | Informe spam
La iteración 'for' puedes implementarla usando WHILE. El acceso a las partes
del string de tu lista puedes hacerlo con las funciones CHARINDEX, PATINDEX,
etc.

Puedes estudiar los detalles de las funciones mencionadas en tus Books
Online (BOL) instalados con el producto.

Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm
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.
"Enzo Marinelli" wrote in message
news:d50801c439e6$dc394aa0$
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.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida