Duda de novato

13/01/2004 - 23:38 por Carlos Rod | Informe spam
Tengo un cursor una aplicacion para actualizar una tabla de sql server 2000.
No se gran cosa de sql server lo que quiero saber es como busco un registro
en sql server teniendo el valor de la clave primaria ? es necesariamente con
un SELECT aunque sea un solo registro ?

uso Visual Foxpro como interfaz

Preguntas similare

Leer las respuestas

#6 Maximiliano Damian Accotto
14/01/2004 - 01:58 | Informe spam
ahh eso si, sin dudas estoy 100% deacuerdo, ahora quizas nuestro amigo lee
ese cursor y luego actualiza en Sql y a eso me referia yo ;-)


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"luis_mtz" escribió en el mensaje
news:047501c3da38$4e469c60$
Hola Max

Bueno definitivamente no se compara actualizar desde un
cursor que usando el update, como bien dices no tiene
sentido ni la comparacion, yo me referia a que un cursor
en VFP es muy distinto a un cursor de SQL Server, sobre
todo en performance.



saludos

luis_mtz


Luiz, el cursor por mas q lo maneje en VFP no tiene


sentido quizas si se
puede hacer lo mismo sin el, ahora si necesitas presentar


la info en una
Grilla, bue no hay otra :(

Pero quizas para hacer un Update se puede hacer con este


mismo comando y no
sabes todo lo mas rapido que es.!!!

Ahh eso si hay un solo problema, no vas a poder poner una


Barra de
desplazamiento :(, con el cursor sabes el limite superior


y podes poner una
barra de desplazamiento ahora de la otra forma no, pero


yo prefiero eso a la
velocidad.

Te invito a que hagas una prueba ;)

Ingresate en una tabla 100.000 registros o mas, y hace


esto:

Un cursor en tu cliente que a cada uno de ellos les


cambie un campo por ej
el pais por otro

y luego esto:

Update mytable set pais='arg'

y contame como te ha ido?

es mas si en lugar de 100.000 pones 1.000.000 o mas te


gustara mas la cosa
:D



Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...desarrolla


dor/default.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"luis_mtz" escribió


en el mensaje
news:06a601c3da2c$697afd70$

Hola

Bueno entiendo que el cursor lo maneja en el cliente con
Visual FoxPro, y un cursor en VFP es una bala; aunque creo
que Carlos puede aclararnos donde lo utiliza..

saludos

luis_mtz


si, debes usar Select

Select * from clientes where nombre='maxi'

pd: ahora usar cursores mmm no te lo recomiendo por mas


que sean de la
aplicacion, porque no hacemos otra cosa:

Nos comentas que buscas (el problema en si) y vemos como


ayudarte via
SqlServer, quizas con algun Store Procedure o haciendo


otra cosa no sea
necesario el Cursor y te funcione todo mucho mas rapido



Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina





-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms.../desarroll




a
dor/default.asp





-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"Carlos Rod" escribió en el




mensaje
news:%
Tengo un cursor una aplicacion para actualizar una




tabla de sql server
2000.
No se gran cosa de sql server lo que quiero saber es




como busco un
registro
en sql server teniendo el valor de la clave primaria ?




es necesariamente
con
un SELECT aunque sea un solo registro ?

uso Visual Foxpro como interfaz















.





.

Respuesta Responder a este mensaje
#7 Maximiliano Damian Accotto
14/01/2004 - 02:43 | Informe spam
Disculpame no, pero porque no usar algo asi como:

Un update para aquellos que se encuentran y un Insert para los que no se
encuentran

ej:

Update tabla set total=total+tabla2.valor
from tabla inner join tabla2 on
tabla.campollave = tabla2.campollave

y luego las del insert con NOT IN

insert into tabla (campos)
select campos where id not in (select id from tabla2)

se entiende?




Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"erneston" escribió en el mensaje
news:

yo uso este cursor para afectar una tabla de existencias

voy leyendo los articulos que contiene un movimiento de inventario y
dependiendo si es salida o entrada afecto al catalogo de existencias.

quisisera que me diera una opinion y me sugirieran como no usar cursores


en
este caso.

gracias

DECLARE CRS_EXISTENCIAS CURSOR FOR
SELECT C.CANT,C.COD_ART,COSTO_SALIDA FROM INVORDD C INNER JOIN CATARTI A


ON
A.COD_ART=C.COD_ART WHERE C.IDMOV=@IDMOV AND C.COD_ART<>'-' AND A.INV='S'
FOR READ ONLY

OPEN CRS_EXISTENCIAS
FETCH NEXT FROM CRS_EXISTENCIAS INTO @CANTIDAD,@COD_ART,@COSTO_SALIDA

WHILE @@FETCH_STATUS <> -1
BEGIN

IF EXISTS(SELECT COD_ART FROM CATEXIS WHERE COD_ART=@COD_ART AND
COD_ALM=@COD_ALM)
SE SUMA LA EXISTENCIA
UPDATE CATEXIS SET EXISTENCIA= EXISTENCIA+ @CANTIDAD,COSTO=@COSTO_SALIDA
WHERE COD_ART=@COD_ART AND COD_ALM=@COD_ALM
ELSE
BEGIN
INSERT CATEXIS (COD_ART,COD_ALM,EXISTENCIA,COSTO) SELECT
@COD_ART,@COD_ALM,@CANTIDAD,@COSTO_SALIDA
END

FETCH NEXT FROM CRS_EXISTENCIAS INTO @CANTIDAD,@COD_ART,@COSTO_SALIDA
END
CLOSE CRS_EXISTENCIAS
DEALLOCATE CRS_EXISTENCIAS

"Eladio Rincón" escribió en el mensaje
news:
Efectivamente, para recuperar información de una tabla debes hacer un
SELECT; sobre el cursor, si la aplicación ya está en producción entiendo


que
no te plantees reescribir el código que usa tu cursor, pero como norma
general debes evitar el uso de cursores; si nos pones el código que usas
para la actualización seguramente podamos echarte una mano ...

Saludos,

Eladio Rincón
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Carlos Rod" escribió en el mensaje
news:%
> Tengo un cursor una aplicacion para actualizar una tabla de sql server
2000.
> No se gran cosa de sql server lo que quiero saber es como busco un
registro
> en sql server teniendo el valor de la clave primaria ? es necesariamente
con
> un SELECT aunque sea un solo registro ?
>
> uso Visual Foxpro como interfaz
>
>
>
>
>
>
>
>
>
>
>


Respuesta Responder a este mensaje
#8 Carlos Rod
14/01/2004 - 02:55 | Informe spam
Gracias a todos por sus rápidas y valiosas respuestas, amigos.

Como pueden ver no sé gran cosa de SQL Server. Programo en Visual Fox de ahí
que utilizo probablemente el término "Cursor" con otro significado. Hablo
de cursor refiriéndome a una tabla de datos temporales y locales que tengo
en un formulario, cuyos registros los voy a actualizar a una tabla de
SQL-Server. Ya con sus respuestas he aclarado que debo usar un SELECT
para buscar cada clave de mi tabla local y poder actualizarlas (con un
UPDATE, claro) a la tabla de SQL Server que es lo que me preocupa
básicamente por el momento.

Gracias de nuevo.

"Carlos Rod" wrote in message
news:#
Tengo un cursor una aplicacion para actualizar una tabla de sql server


2000.
No se gran cosa de sql server lo que quiero saber es como busco un


registro
en sql server teniendo el valor de la clave primaria ? es necesariamente


con
un SELECT aunque sea un solo registro ?

uso Visual Foxpro como interfaz











Respuesta Responder a este mensaje
#9 Javier Loria
14/01/2004 - 03:27 | Informe spam
Hola:
Es un poco dificil sin tener las tablas para poder revisar nuesta propia
sintaxis, pero debe ser algo mas o menos asi:
UPDATE CATEXIS
SET EXISTENCIA= EXISTENCIA+C.CANT,
COSTO=C.COSTO_SALIDA
FROM INVORDD C
INNER JOIN CATARTI A
ON A.COD_ART=C.COD_ART
INNER JOIN CATEXIS
ON CATEXIS.COD_ART=C.COD_ART
AND CATEXIS.COD_ALM=@COD_ALM
WHERE C.IDMOV=@IDMOV
AND C.COD_ART<>'-'
AND A.INV='S'

INSERT CATEXIS (COD_ART,COD_ALM,EXISTENCIA,COSTO)
SELECT C.COD_ART,@COD_ALM, C.CANT,COSTO_SALIDA
FROM INVORDD C
INNER JOIN CATARTI A
ON A.COD_ART=C.COD_ART
LEFT JOIN CATEXIS
ON CATEXIS.COD_ART=C.COD_ART
AND CATEXIS.COD_ALM=@COD_ALM
WHERE C.IDMOV=@IDMOV
AND C.COD_ART<>'-'
AND A.INV='S'
AND CATEXIS.COD_ART IS NULL

Espero te sirva y no haber cometido ningun error de sintaxis,

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.


erneston escribio:
yo uso este cursor para afectar una tabla de existencias

voy leyendo los articulos que contiene un movimiento de inventario y
dependiendo si es salida o entrada afecto al catalogo de existencias.

quisisera que me diera una opinion y me sugirieran como no usar
cursores en este caso.

gracias

DECLARE CRS_EXISTENCIAS CURSOR FOR
SELECT C.CANT,C.COD_ART,COSTO_SALIDA FROM INVORDD C INNER JOIN
CATARTI A ON A.COD_ART=C.COD_ART WHERE C.IDMOV=@IDMOV AND
C.COD_ART<>'-' AND A.INV='S' FOR READ ONLY

OPEN CRS_EXISTENCIAS
FETCH NEXT FROM CRS_EXISTENCIAS INTO @CANTIDAD,@COD_ART,@COSTO_SALIDA

WHILE @@FETCH_STATUS <> -1
BEGIN

IF EXISTS(SELECT COD_ART FROM CATEXIS WHERE COD_ART=@COD_ART AND
COD_ALM=@COD_ALM)
ALMACEN SE SUMA LA EXISTENCIA
UPDATE CATEXIS SET EXISTENCIA= EXISTENCIA+
@CANTIDAD,COSTO=@COSTO_SALIDA WHERE COD_ART=@COD_ART AND
COD_ALM=@COD_ALM ELSE
BEGIN
EXISTENCIA INSERT CATEXIS (COD_ART,COD_ALM,EXISTENCIA,COSTO) SELECT
@COD_ART,@COD_ALM,@CANTIDAD,@COSTO_SALIDA
END

FETCH NEXT FROM CRS_EXISTENCIAS INTO
@CANTIDAD,@COD_ART,@COSTO_SALIDA
END
CLOSE CRS_EXISTENCIAS
DEALLOCATE CRS_EXISTENCIAS

"Eladio Rincón" escribió en el mensaje
news:
Efectivamente, para recuperar información de una tabla debes hacer un
SELECT; sobre el cursor, si la aplicación ya está en producción
entiendo que no te plantees reescribir el código que usa tu cursor,
pero como norma general debes evitar el uso de cursores; si nos pones
el código que usas para la actualización seguramente podamos echarte
una mano ...

Saludos,


"Carlos Rod" escribió en el mensaje
news:%
Tengo un cursor una aplicacion para actualizar una tabla de sql
server 2000. No se gran cosa de sql server lo que quiero saber es
como busco un registro en sql server teniendo el valor de la clave
primaria ? es necesariamente con un SELECT aunque sea un solo
registro ?

uso Visual Foxpro como interfaz
Respuesta Responder a este mensaje
#10 erneston
14/01/2004 - 03:32 | Informe spam
yo uso este cursor para afectar una tabla de existencias

voy leyendo los articulos que contiene un movimiento de inventario y
dependiendo si es salida o entrada afecto al catalogo de existencias.

quisisera que me diera una opinion y me sugirieran como no usar cursores en
este caso.

gracias

DECLARE CRS_EXISTENCIAS CURSOR FOR
SELECT C.CANT,C.COD_ART,COSTO_SALIDA FROM INVORDD C INNER JOIN CATARTI A ON
A.COD_ART=C.COD_ART WHERE C.IDMOV=@IDMOV AND C.COD_ART<>'-' AND A.INV='S'
FOR READ ONLY

OPEN CRS_EXISTENCIAS
FETCH NEXT FROM CRS_EXISTENCIAS INTO @CANTIDAD,@COD_ART,@COSTO_SALIDA

WHILE @@FETCH_STATUS <> -1
BEGIN

IF EXISTS(SELECT COD_ART FROM CATEXIS WHERE COD_ART=@COD_ART AND
COD_ALM=@COD_ALM)
SE SUMA LA EXISTENCIA
UPDATE CATEXIS SET EXISTENCIA= EXISTENCIA+ @CANTIDAD,COSTO=@COSTO_SALIDA
WHERE COD_ART=@COD_ART AND COD_ALM=@COD_ALM
ELSE
BEGIN
INSERT CATEXIS (COD_ART,COD_ALM,EXISTENCIA,COSTO) SELECT
@COD_ART,@COD_ALM,@CANTIDAD,@COSTO_SALIDA
END

FETCH NEXT FROM CRS_EXISTENCIAS INTO @CANTIDAD,@COD_ART,@COSTO_SALIDA
END
CLOSE CRS_EXISTENCIAS
DEALLOCATE CRS_EXISTENCIAS

"Eladio Rincón" escribió en el mensaje
news:
Efectivamente, para recuperar información de una tabla debes hacer un
SELECT; sobre el cursor, si la aplicación ya está en producción entiendo que
no te plantees reescribir el código que usa tu cursor, pero como norma
general debes evitar el uso de cursores; si nos pones el código que usas
para la actualización seguramente podamos echarte una mano ...

Saludos,

Eladio Rincón
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Carlos Rod" escribió en el mensaje
news:%
Tengo un cursor una aplicacion para actualizar una tabla de sql server


2000.
No se gran cosa de sql server lo que quiero saber es como busco un


registro
en sql server teniendo el valor de la clave primaria ? es necesariamente


con
un SELECT aunque sea un solo registro ?

uso Visual Foxpro como interfaz











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