Obtener última clave insertada en sql server

14/09/2004 - 15:14 por Juan Melas | Informe spam
Tengo una rutina para actualizar una tabla principal y una de detalles en
sql server a través de cursor adapter y me sucede que algunas veces falla al
tomar la última inserción me pone en la tabla secundaria la clave siguiente,
puede ser que al insertar simultánemante desde 2 máquinas diferentes la
segunda sea más rápida y al efectuar el select @@Identity la clave principal
ha cambiado, paso la parte del código que utilizo.

Gracias.


LOCAL ok as Boolean
ok=.f.
SELECT ivacomp
lnResult = SQLSetProp(nHandle,"TRANSACTIONS",2)
ok=TABLEUPDATE(.T.)
IF ok=.F.
®RROR(lerror)
SQLRollback(nHandle)
ms="2-"+lerror(1,3)
ELSE
IF llnuevo=.t.
=SQLEXEC(nHandle,"select @@Identity as Identy","identi")
lnId=Identi.Identy
USE IN Identi
SELECT compras
REPLACE ALL compras.IdIvacomp WITH lnId
ENDIF
SELECT compras
ok=TABLEUPDATE(.T.)
IF ok=.F.
®RROR(lerror)
SQLRollback(nHandle)
ms="2-"+lerror(1,3)
ELSE
SQLCommit(nHandle)
ms="1-Actualizacion correcta"
ENDIF
ENDIF
lnResult = SQLSetProp(nHandle,"TRANSACTIONS",1)
 

Leer las respuestas

#1 Luis María Guayán
14/09/2004 - 16:04 | Informe spam
Mira si este truco te sirve, ya que ejecuta todo el comando en una sola
llamada SQLEXECT:

http://www.portalfox.com/article.php?sid41

Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos


"Juan Melas" escribió en el mensaje
news:
Tengo una rutina para actualizar una tabla principal y una de detalles en
sql server a través de cursor adapter y me sucede que algunas veces falla


al
tomar la última inserción me pone en la tabla secundaria la clave


siguiente,
puede ser que al insertar simultánemante desde 2 máquinas diferentes la
segunda sea más rápida y al efectuar el select @@Identity la clave


principal
ha cambiado, paso la parte del código que utilizo.

Gracias.


LOCAL ok as Boolean
ok=.f.
SELECT ivacomp
lnResult = SQLSetProp(nHandle,"TRANSACTIONS",2)
ok=TABLEUPDATE(.T.)
IF ok=.F.
®RROR(lerror)
SQLRollback(nHandle)
ms="2-"+lerror(1,3)
ELSE
IF llnuevo=.t.
=SQLEXEC(nHandle,"select @@Identity as Identy","identi")
lnId=Identi.Identy
USE IN Identi
SELECT compras
REPLACE ALL compras.IdIvacomp WITH lnId
ENDIF
SELECT compras
ok=TABLEUPDATE(.T.)
IF ok=.F.
®RROR(lerror)
SQLRollback(nHandle)
ms="2-"+lerror(1,3)
ELSE
SQLCommit(nHandle)
ms="1-Actualizacion correcta"
ENDIF
ENDIF
lnResult = SQLSetProp(nHandle,"TRANSACTIONS",1)


Preguntas similares