CURSOR ACTUALIZABLE POR DEFECTO

20/05/2004 - 13:57 por Jomaweb | Informe spam
¿no se supone que todos los cursores de SQL Server 2000 son actualizables
por defecto?
Tengo un cursor declarado así:

DECLARE MICURSOR CURSOR FOR

select id,cliente from contratos for update of cliente
open micursor
fetch micursor into @ident,@ncliente
while (@@fetch_status=0)
begin
realiza operaciones
fetch micursor into @ident,@ncliente
end
close micursor
deallocate micursor


pero al ejecutarlo me dice: "No se puede especificar FOR UPDATE en un cursor
READ ONLY."

¿cuál es el error de configuración o declaración, porque yo no lo veo?

Preguntas similare

Leer las respuestas

#1 Liliana Sorrentino
20/05/2004 - 14:30 | Informe spam
Hola,
¿Estás seguro de que la operación que intentás realizar sólo pude hacerse a
través de cursores?
Sería interesante que lo reconsideraras o contaras lo que necesitás hacer
para ver si podemos sugerirte otra opción.

Pero si estás decidido a hacerlo así, este ejemplo funciona.
Saludos... Liliana. (espero no perder mi membresía de la Brigada
AntiCursores)

CREATE TABLE #test
(ident smallint,
ncliente smallint)
INSERT #test SELECT 1, 10
INSERT #test SELECT 2, 20
INSERT #test SELECT 3, 30
INSERT #test SELECT 4, 40

DECLARE @ident smallint, @ncliente smallint
DECLARE MICURSOR CURSOR FOR
SELECT ident, ncliente FROM #test
OPEN micursor
FETCH micursor INTO @ident,@ncliente
WHILE (@@fetch_status=0)
BEGIN
UPDATE #test SET ncliente = @ncliente + 1 WHERE CURRENT OF micursor
FETCH micursor INTO @ident,@ncliente
END
CLOSE micursor
DEALLOCATE micursor

SELECT * from #test


"Jomaweb" escribió en el mensaje
news:

¿no se supone que todos los cursores de SQL Server 2000 son actualizables
por defecto?
Tengo un cursor declarado así:

DECLARE MICURSOR CURSOR FOR

select id,cliente from contratos for update of cliente
open micursor
fetch micursor into @ident,@ncliente
while (@@fetch_status=0)
begin
realiza operaciones
fetch micursor into @ident,@ncliente
end
close micursor
deallocate micursor


pero al ejecutarlo me dice: "No se puede especificar FOR UPDATE en un


cursor
READ ONLY."

¿cuál es el error de configuración o declaración, porque yo no lo veo?


Respuesta Responder a este mensaje
#2 Jomaweb
20/05/2004 - 15:40 | Informe spam
Me temo que tu ejemplo establece todos los registros al mismo número, y no
numeros consecutivos , que es lo que necesito.


"Liliana Sorrentino" escribió en el mensaje
news:
Hola,
¿Estás seguro de que la operación que intentás realizar sólo pude hacerse


a
través de cursores?
Sería interesante que lo reconsideraras o contaras lo que necesitás hacer
para ver si podemos sugerirte otra opción.

Pero si estás decidido a hacerlo así, este ejemplo funciona.
Saludos... Liliana. (espero no perder mi membresía de la Brigada
AntiCursores)

CREATE TABLE #test
(ident smallint,
ncliente smallint)
INSERT #test SELECT 1, 10
INSERT #test SELECT 2, 20
INSERT #test SELECT 3, 30
INSERT #test SELECT 4, 40

DECLARE @ident smallint, @ncliente smallint
DECLARE MICURSOR CURSOR FOR
SELECT ident, ncliente FROM #test
OPEN micursor
FETCH micursor INTO @ident,@ncliente
WHILE (@@fetch_status=0)
BEGIN
UPDATE #test SET ncliente = @ncliente + 1 WHERE CURRENT OF micursor
FETCH micursor INTO @ident,@ncliente
END
CLOSE micursor
DEALLOCATE micursor

SELECT * from #test


"Jomaweb" escribió en el mensaje
news:
>
> ¿no se supone que todos los cursores de SQL Server 2000 son


actualizables
> por defecto?
> Tengo un cursor declarado así:
>
> DECLARE MICURSOR CURSOR FOR
>
> select id,cliente from contratos for update of cliente
> open micursor
> fetch micursor into @ident,@ncliente
> while (@@fetch_status=0)
> begin
> realiza operaciones
> fetch micursor into @ident,@ncliente
> end
> close micursor
> deallocate micursor
>
>
> pero al ejecutarlo me dice: "No se puede especificar FOR UPDATE en un
cursor
> READ ONLY."
>
> ¿cuál es el error de configuración o declaración, porque yo no lo veo?
>
>


Respuesta Responder a este mensaje
#3 Liliana Sorrentino
20/05/2004 - 16:30 | Informe spam
Por más que pruebo, no encuentro forma de que le dé a todos el mismo número,
si estamos hablando del ejemplo con cursores.
De todas maneras, tanto Rubén como Ulises te dieron soluciones sin cursores,
que es lo indicado para este caso.
Saludos... Liliana.

"Jomaweb" escribió en el mensaje
news:
Me temo que tu ejemplo establece todos los registros al mismo número, y no
numeros consecutivos , que es lo que necesito.


"Liliana Sorrentino" escribió en el


mensaje
news:
> Hola,
> ¿Estás seguro de que la operación que intentás realizar sólo pude


hacerse
a
> través de cursores?
> Sería interesante que lo reconsideraras o contaras lo que necesitás


hacer
> para ver si podemos sugerirte otra opción.
>
> Pero si estás decidido a hacerlo así, este ejemplo funciona.
> Saludos... Liliana. (espero no perder mi membresía de la Brigada
> AntiCursores)
>
> CREATE TABLE #test
> (ident smallint,
> ncliente smallint)
> INSERT #test SELECT 1, 10
> INSERT #test SELECT 2, 20
> INSERT #test SELECT 3, 30
> INSERT #test SELECT 4, 40
>
> DECLARE @ident smallint, @ncliente smallint
> DECLARE MICURSOR CURSOR FOR
> SELECT ident, ncliente FROM #test
> OPEN micursor
> FETCH micursor INTO @ident,@ncliente
> WHILE (@@fetch_status=0)
> BEGIN
> UPDATE #test SET ncliente = @ncliente + 1 WHERE CURRENT OF micursor
> FETCH micursor INTO @ident,@ncliente
> END
> CLOSE micursor
> DEALLOCATE micursor
>
> SELECT * from #test
>
>
> "Jomaweb" escribió en el mensaje
> news:
> >
> > ¿no se supone que todos los cursores de SQL Server 2000 son
actualizables
> > por defecto?
> > Tengo un cursor declarado así:
> >
> > DECLARE MICURSOR CURSOR FOR
> >
> > select id,cliente from contratos for update of cliente
> > open micursor
> > fetch micursor into @ident,@ncliente
> > while (@@fetch_status=0)
> > begin
> > realiza operaciones
> > fetch micursor into @ident,@ncliente
> > end
> > close micursor
> > deallocate micursor
> >
> >
> > pero al ejecutarlo me dice: "No se puede especificar FOR UPDATE en un
> cursor
> > READ ONLY."
> >
> > ¿cuál es el error de configuración o declaración, porque yo no lo veo?
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Javier Loria
20/05/2004 - 17:30 | Informe spam
Hola:
Si el SELECT no es actualizable el Cursor tampoco.
Id o cliente son llave primaria o Unique?
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Jomaweb escribio:
¿no se supone que todos los cursores de SQL Server 2000 son
actualizables por defecto?
Tengo un cursor declarado así:

DECLARE MICURSOR CURSOR FOR

select id,cliente from contratos for update of cliente
open micursor
fetch micursor into @ident,@ncliente
while (@@fetch_status=0)
begin
realiza operaciones
fetch micursor into @ident,@ncliente
end
close micursor
deallocate micursor


pero al ejecutarlo me dice: "No se puede especificar FOR UPDATE en un
cursor READ ONLY."

¿cuál es el error de configuración o declaración, porque yo no lo veo?
Respuesta Responder a este mensaje
#5 Jomaweb
21/05/2004 - 13:40 | Informe spam
Si, son clave primaria Identity.

"Javier Loria" escribió en el mensaje
news:
Hola:
Si el SELECT no es actualizable el Cursor tampoco.
Id o cliente son llave primaria o Unique?
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Jomaweb escribio:
> ¿no se supone que todos los cursores de SQL Server 2000 son
> actualizables por defecto?
> Tengo un cursor declarado así:
>
> DECLARE MICURSOR CURSOR FOR
>
> select id,cliente from contratos for update of cliente
> open micursor
> fetch micursor into @ident,@ncliente
> while (@@fetch_status=0)
> begin
> realiza operaciones
> fetch micursor into @ident,@ncliente
> end
> close micursor
> deallocate micursor
>
>
> pero al ejecutarlo me dice: "No se puede especificar FOR UPDATE en un
> cursor READ ONLY."
>
> ¿cuál es el error de configuración o declaración, porque yo no lo veo?


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida