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

#16 Alejandro Mesa
26/10/2007 - 19:51 | Informe spam
Mea culpa!!!

Puedes leer el mensaje inmediato.

Saludos,
AMB

"jeastman - Hotmail" wrote:

Que tal Alejando.

Sino entendí mal, ese cursor no está seleccionando una fila al azar, está
haciendo un recorrido de todos los registros de la tabla, y está tomando
solo una columna, que según dijo Miguel al principio es la única columna que
tiene dicha tabla.

Saludos.

"Alejandro Mesa" escribió en el
mensaje news:
> Hila Miguel,
>
> Por que usas un cursor, si solo estas selccionando una unica fila al asar?
>
> Chequea la definicion de tu cursor.
>
>> > > DECLARE cur_rcc CURSOR GLOBAL FOR
>> > >
>> > > SELECT cadena FROM texto
>
> Si la tabla [texto] tiene mas de una fila, entonces estas seleccionado
> solo
> el valor de la columna de una unica fila al asar.
>
> Ejemplo:
>
> declare @t table (c1 int not null identity)
>
> insert into @t default values
> insert into @t default values
> insert into @t default values
>
> declare @i int
>
> select @i = c1 from @t
>
> select @i
> go
>
>
> AMB
>
> "Miguel" wrote:
>
>> He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
>> pero al final no lo realiza.
>>
>> la tabla no tiene valores Nulos
>>
>> "jeastman - Hotmail" wrote:
>>
>> > Hola Miguel...
>> >
>> > Te sugiero que pongas un "print @cadena" justo antes de llamar el SP
>> > para
>> > ver el contenido de la variable, aparentemente no existe ingún
>> > problema.
>> >
>> > Una vez que hagas la prueba nos comentas para ver en que te podemos
>> > ayudar.
>> >
>> > También revisa el tipo de datos del parámetro dentro del cursor.
>> >
>> > y por último te sugiero que revises el contenido de la tabla donde
>> > están las
>> > cadenas para estár seguro que no tienes valores nulos
>> >
>> > select cadena from text where cadena is null
>> >
>> > si éste te regresa algún registro, empieza por ahi.
>> >
>> >
>> > Saludos.
>> >
>> > "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
>> > >
>> > >
>> > >
>> > > ||1|40513530|1|
>> > > |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
#17 jeastman - Hotmail
26/10/2007 - 19:59 | Informe spam
Hola Alejandro.

Disculpa, es una pregunta o un comentario?

En cualquiera de los casos, para quien es?

"Alejandro Mesa" escribió en el
mensaje news:
Mea culpa!!!

Puedes leer el mensaje inmediato.

Saludos,
AMB

"jeastman - Hotmail" wrote:

Que tal Alejando.

Sino entendí mal, ese cursor no está seleccionando una fila al azar, está
haciendo un recorrido de todos los registros de la tabla, y está tomando
solo una columna, que según dijo Miguel al principio es la única columna
que
tiene dicha tabla.

Saludos.

"Alejandro Mesa" escribió en el
mensaje news:
> Hila Miguel,
>
> Por que usas un cursor, si solo estas selccionando una unica fila al
> asar?
>
> Chequea la definicion de tu cursor.
>
>> > > DECLARE cur_rcc CURSOR GLOBAL FOR
>> > >
>> > > SELECT cadena FROM texto
>
> Si la tabla [texto] tiene mas de una fila, entonces estas seleccionado
> solo
> el valor de la columna de una unica fila al asar.
>
> Ejemplo:
>
> declare @t table (c1 int not null identity)
>
> insert into @t default values
> insert into @t default values
> insert into @t default values
>
> declare @i int
>
> select @i = c1 from @t
>
> select @i
> go
>
>
> AMB
>
> "Miguel" wrote:
>
>> He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
>> pero al final no lo realiza.
>>
>> la tabla no tiene valores Nulos
>>
>> "jeastman - Hotmail" wrote:
>>
>> > Hola Miguel...
>> >
>> > Te sugiero que pongas un "print @cadena" justo antes de llamar el SP
>> > para
>> > ver el contenido de la variable, aparentemente no existe ingún
>> > problema.
>> >
>> > Una vez que hagas la prueba nos comentas para ver en que te podemos
>> > ayudar.
>> >
>> > También revisa el tipo de datos del parámetro dentro del cursor.
>> >
>> > y por último te sugiero que revises el contenido de la tabla donde
>> > están las
>> > cadenas para estár seguro que no tienes valores nulos
>> >
>> > select cadena from text where cadena is null
>> >
>> > si éste te regresa algún registro, empieza por ahi.
>> >
>> >
>> > Saludos.
>> >
>> > "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
>> > >
>> > >
>> > >
>> > > ||1|40513530|1|
>> > > |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
#18 jeastman - Hotmail
26/10/2007 - 20:02 | Informe spam
Ah, ok..

Ahora si comprendí.

La verdad que tu mensaje apareció en el grupo de noticias luego que yo envié
el comentario.

No te preocupes, eso me pasa a mi todo el tiempo.

Un saludo.

"Alejandro Mesa" escribió en el
mensaje news:
Mea culpa!!!

Puedes leer el mensaje inmediato.

Saludos,
AMB

"jeastman - Hotmail" wrote:

Que tal Alejando.

Sino entendí mal, ese cursor no está seleccionando una fila al azar, está
haciendo un recorrido de todos los registros de la tabla, y está tomando
solo una columna, que según dijo Miguel al principio es la única columna
que
tiene dicha tabla.

Saludos.

"Alejandro Mesa" escribió en el
mensaje news:
> Hila Miguel,
>
> Por que usas un cursor, si solo estas selccionando una unica fila al
> asar?
>
> Chequea la definicion de tu cursor.
>
>> > > DECLARE cur_rcc CURSOR GLOBAL FOR
>> > >
>> > > SELECT cadena FROM texto
>
> Si la tabla [texto] tiene mas de una fila, entonces estas seleccionado
> solo
> el valor de la columna de una unica fila al asar.
>
> Ejemplo:
>
> declare @t table (c1 int not null identity)
>
> insert into @t default values
> insert into @t default values
> insert into @t default values
>
> declare @i int
>
> select @i = c1 from @t
>
> select @i
> go
>
>
> AMB
>
> "Miguel" wrote:
>
>> He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
>> pero al final no lo realiza.
>>
>> la tabla no tiene valores Nulos
>>
>> "jeastman - Hotmail" wrote:
>>
>> > Hola Miguel...
>> >
>> > Te sugiero que pongas un "print @cadena" justo antes de llamar el SP
>> > para
>> > ver el contenido de la variable, aparentemente no existe ingún
>> > problema.
>> >
>> > Una vez que hagas la prueba nos comentas para ver en que te podemos
>> > ayudar.
>> >
>> > También revisa el tipo de datos del parámetro dentro del cursor.
>> >
>> > y por último te sugiero que revises el contenido de la tabla donde
>> > están las
>> > cadenas para estár seguro que no tienes valores nulos
>> >
>> > select cadena from text where cadena is null
>> >
>> > si éste te regresa algún registro, empieza por ahi.
>> >
>> >
>> > Saludos.
>> >
>> > "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
>> > >
>> > >
>> > >
>> > > ||1|40513530|1|
>> > > |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
#19 Alejandro Mesa
26/10/2007 - 20:06 | Informe spam
Hola Miguel,

Que version de SQL Server usas?

Si usas SS 2005, puedes crear una funcion que parta esa lista y devuelva una
tabla con cada elemento de la lista como una fila. Luego usas esa funcion en
una sentencia "select" usando el nuevo operador CROSS APPLY.

Ve si este msg te es de ayuda.

http://www.microsoft.com/communitie...sloc=en-us

Tambien puedes leerr el sgte articulo que trata sobre este tema.

Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html

AMB

"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??

"Alejandro Mesa" wrote:

> Miguel,
>
> Altera tu sp y pon una sentencia "" al principio seguida de
> "RETURN 0" y chequea si se imprime la cadena. Si la cadena se imprime,
> entonces la logica dentro del sp es la que esta fallando.
>
>
> AMB
>
> "Miguel" wrote:
>
> > He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
> > pero al final no lo realiza.
> >
> > la tabla no tiene valores Nulos
> >
> > "jeastman - Hotmail" wrote:
> >
> > > Hola Miguel...
> > >
> > > Te sugiero que pongas un "print @cadena" justo antes de llamar el SP para
> > > ver el contenido de la variable, aparentemente no existe ingún problema.
> > >
> > > Una vez que hagas la prueba nos comentas para ver en que te podemos ayudar.
> > >
> > > También revisa el tipo de datos del parámetro dentro del cursor.
> > >
> > > y por último te sugiero que revises el contenido de la tabla donde están las
> > > cadenas para estár seguro que no tienes valores nulos
> > >
> > > select cadena from text where cadena is null
> > >
> > > si éste te regresa algún registro, empieza por ahi.
> > >
> > >
> > > Saludos.
> > >
> > > "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
#20 Alejandro Mesa
26/10/2007 - 20:15 | Informe spam
Creo que he posteado un link al msg que no era. De todas maneras aqui va:

http://www.microsoft.com/communitie...sloc=en-us

Vaya lio que me he armado con este hilo.

AMB

"Alejandro Mesa" wrote:

Hola Miguel,

Que version de SQL Server usas?

Si usas SS 2005, puedes crear una funcion que parta esa lista y devuelva una
tabla con cada elemento de la lista como una fila. Luego usas esa funcion en
una sentencia "select" usando el nuevo operador CROSS APPLY.

Ve si este msg te es de ayuda.

http://www.microsoft.com/communitie...sloc=en-us

Tambien puedes leerr el sgte articulo que trata sobre este tema.

Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html

AMB

"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??
>
> "Alejandro Mesa" wrote:
>
> > Miguel,
> >
> > Altera tu sp y pon una sentencia "" al principio seguida de
> > "RETURN 0" y chequea si se imprime la cadena. Si la cadena se imprime,
> > entonces la logica dentro del sp es la que esta fallando.
> >
> >
> > AMB
> >
> > "Miguel" wrote:
> >
> > > He puesto el PRINT cadena antes del EXEC SP y si me muestra la Cadena
> > > pero al final no lo realiza.
> > >
> > > la tabla no tiene valores Nulos
> > >
> > > "jeastman - Hotmail" wrote:
> > >
> > > > Hola Miguel...
> > > >
> > > > Te sugiero que pongas un "print @cadena" justo antes de llamar el SP para
> > > > ver el contenido de la variable, aparentemente no existe ingún problema.
> > > >
> > > > Una vez que hagas la prueba nos comentas para ver en que te podemos ayudar.
> > > >
> > > > También revisa el tipo de datos del parámetro dentro del cursor.
> > > >
> > > > y por último te sugiero que revises el contenido de la tabla donde están las
> > > > cadenas para estár seguro que no tienes valores nulos
> > > >
> > > > select cadena from text where cadena is null
> > > >
> > > > si éste te regresa algún registro, empieza por ahi.
> > > >
> > > >
> > > > Saludos.
> > > >
> > > > "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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida