Miguel

26/10/2007 - 17:08 por Miguel | Informe spam
Hola a todos, tengo una consulta sobre cursores.

El caso es:
- Tengo una tabla con un unico campo que es un varchar(400)
- Creo un Cursor con los datos de esta Tabla
- Recorro el cursor y tomo el campo como variable
- Ejecuto un SP dentro de las sentencias BEGIN..END

El caso es que en el SP que ejecuto realizo un INSERT a otra tabla con los
datos de la cadena, pero dentro del cursor no funciona e inserta solo valores
nulos. Pero si usao el SP en el Analizador de Consultas si lo realiza
normalmente.
Adjunto el codigo para mayor detalle.



DECLARE @cadena varchar(400)

DECLARE cur_rcc CURSOR GLOBAL FOR

SELECT cadena FROM texto

OPEN cur_rcc

FETCH NEXT FROM cur_rcc

INTO @cadena



WHILE @@FETCH_STATUS = 0

BEGIN



|001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'

EXECUTE SP_02 @cadena



FETCH NEXT FROM cur_rcc

INTO @cadena

END



CLOSE cur_rcc

DEALLOCATE cur_rcc



Si ejecuto EXECUTE SP_02 cadenatexto Si lo ejecuta pero no dentro del cursor

Preguntas similare

Leer las respuestas

#21 Carlos M. Calvelo
26/10/2007 - 23:17 | Informe spam
On 26 okt, 18:00, Miguel wrote:
El hecho es que debo recorrer esa tabla (cuyo origen es un archivo palno txt)
que contiene una cadena de carateres, luego usando sp que menciono se hacen
calculos del contenido de esa cadena y luego se insert a una Tabla Final.

Ejm: cadena = '123,1000, , , ,gomez,torres,juan'

Que otra forma puedo usar??





Hola Miguel,

Una idea:
No puedes importar los datos desde al archivo de texto
original con DTS usando la coma como separador?

Saludos,
Carlos
Respuesta Responder a este mensaje
#22 jeastman - Hotmail
27/10/2007 - 10:26 | Informe spam
Hola Miguel.

Mira ésta otra forma de hacer la captura de campos a partir de una cadena.

Uno de los compañeros te sugirió que emplearas DTS cambiando los
deliminatores (|) por comas (,), creo que no hace falta cambiar el
delimitador.

Ahora, en el ejemplo que tienes abajo, solo hay que tener cuidado con algo,
y es que entre delimitador debe existir algún valor, por eso en éste caso y
tomando la cadena que tú pasaste coloqué un signo menos (-).

Por otra parte, todoas las variables les cambie el tipo de dato, esto para
hacer las pruebas, creo que te debe funcionar con los tipos que tenías
originalmente.

Saludos.

=declare @lista varchar(200),
@campo1 CHAR(10),
@campo2 CHAR(10),
@campo3 CHAR(8),
@campo4 CHAR(1),
@campo5 CHAR(11),
@campo6 CHAR(1),
@campo7 CHAR(12),
@campo8 CHAR(1),
@campo9 CHAR(1),
@campo10 int,
@campo11 money,
@campo12 money,
@campo13 money,
@campo14 money,
@campo15 money,
@campo16 CHAR(120),
@campo17 CHAR(40),
@campo18 CHAR(40),
@campo19 CHAR(40),
@campo20 CHAR(40)


set @lista = '1 |0071981991 |20070831 |- |- |1 |40513530 |1 |- |001 |10000
|00000 |00000 |00000 |00000 |RAMIREZ |SINARAHUA |- |MARIELITH |JOSE'

exec master..xp_sscanf @lista, '%s |%s |%s |%s |%s |%s |%s |%s |%s |%s |%s
|%s |%s |%s |%s |%s |%s |%s |%s |%s',
@campo1 output,
@campo2 output,
@campo3 output,
@campo4 output,
@campo5 output,
@campo6 output,
@campo7 output,
@campo8 output,
@campo9 output,
@campo10 output,
@campo11 output,
@campo12 output,
@campo13 output,
@campo14 output,
@campo15 output,
@campo16 output,
@campo17 output,
@campo18 output,
@campo19 output,
@campo20 output

select @campo1 as campo1,
@campo2 as campo2,
@campo3 as campo3,
@campo4 as campo4,
@campo5 as campo5,
@campo6 as campo6,
@campo7 as campo7,
@campo8 as campo8,
@campo9 as campo9,
@campo10 as campo10,
@campo11 as campo11,
@campo12 as campo12,
@campo13 as campo13,
@campo14 as campo14,
@campo15 as campo15,
@campo16 as campo16,
@campo17 as campo17,
@campo18 as campo18,
@campo19 as campo19,
@campo20 as campo20
=
"Miguel" escribió en el mensaje
news:
Hola a todos, tengo una consulta sobre cursores.

El caso es:
- Tengo una tabla con un unico campo que es un varchar(400)
- Creo un Cursor con los datos de esta Tabla
- Recorro el cursor y tomo el campo como variable
- Ejecuto un SP dentro de las sentencias BEGIN..END

El caso es que en el SP que ejecuto realizo un INSERT a otra tabla con los
datos de la cadena, pero dentro del cursor no funciona e inserta solo
valores
nulos. Pero si usao el SP en el Analizador de Consultas si lo realiza
normalmente.
Adjunto el codigo para mayor detalle.



DECLARE @cadena varchar(400)

DECLARE cur_rcc CURSOR GLOBAL FOR

SELECT cadena FROM texto

OPEN cur_rcc

FETCH NEXT FROM cur_rcc

INTO @cadena



WHILE @@FETCH_STATUS = 0

BEGIN



|001|10000|00000|00000|00000|00000|RAMIREZ|SINARAHUA||MARIELITH|JOSE'

EXECUTE SP_02 @cadena



FETCH NEXT FROM cur_rcc

INTO @cadena

END



CLOSE cur_rcc

DEALLOCATE cur_rcc



Si ejecuto EXECUTE SP_02 cadenatexto Si lo ejecuta pero no dentro del
cursor

Respuesta Responder a este mensaje
#23 Carlos M. Calvelo
27/10/2007 - 12:07 | Informe spam
On 27 okt, 10:26, "jeastman - Hotmail" wrote:

Uno de los compañeros te sugirió que emplearas DTS cambiando los
deliminatores (|) por comas (,), creo que no hace falta cambiar el
delimitador.




Simplemente cambiar | por , no tendría mucho sentido no?
Mi propuesta, mas bien pregunta, es por qué no se hace
los siguiente:

Las comas ya están en el archivo de texto original. Al parecer
ya se han cambiado las comas a delimitadores '|' para crear
la primera tabla.
Importando ese archivo original (con comas) se podría crear
directamente la tabla con los campos campo1 .. campo10.
Después se puede procesar esa tabla, para lo que me
parece que ni hacen falta todos los procedimientos que
estoy viendo.

Saludos,
Carlos
Respuesta Responder a este mensaje
#24 jeastman - Hotmail
27/10/2007 - 12:39 | Informe spam
Hola Carlos...

Exacto, tienes razón, pero de verdad desconozco de como obtuvo Miguel la
tabla "TEXTO", si fue con DTS, lo que tú dices es 100% válido, ahora si la
está generando con una aplicación cliente, que no creo, es otro cuento.

Esperemos que Miguel nos comente como logró obtener la mensionada tabla.

Un saludo.

"Carlos M. Calvelo" escribió en el mensaje
news:
On 27 okt, 10:26, "jeastman - Hotmail" wrote:

Uno de los compañeros te sugirió que emplearas DTS cambiando los
deliminatores (|) por comas (,), creo que no hace falta cambiar el
delimitador.




Simplemente cambiar | por , no tendría mucho sentido no?
Mi propuesta, mas bien pregunta, es por qué no se hace
los siguiente:

Las comas ya están en el archivo de texto original. Al parecer
ya se han cambiado las comas a delimitadores '|' para crear
la primera tabla.
Importando ese archivo original (con comas) se podría crear
directamente la tabla con los campos campo1 .. campo10.
Después se puede procesar esa tabla, para lo que me
parece que ni hacen falta todos los procedimientos que
estoy viendo.

Saludos,
Carlos
Respuesta Responder a este mensaje
#25 Carlos M. Calvelo
27/10/2007 - 13:47 | Informe spam
On 27 okt, 12:39, "jeastman - Hotmail" wrote:
Hola Carlos...

Exacto, tienes razón, pero de verdad desconozco de como obtuvo Miguel la
tabla "TEXTO", si fue con DTS, lo que tú dices es 100% válido, ahora si la
está generando con una aplicación cliente, que no creo, es otro cuento.




Entonces yo exportaría esa tabla a un archivo de texto y
el problema quedaría reducido al anterior: importar un
archivo de texto. Esta vez con con delimitaror '|' entre
columnas en vez de comas. :-)

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida