Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Usar SELECT @@IDENTITY de manera anidada para que sirva de valor en otra sentencia

Estas en el tema de Usar SELECT @@IDENTITY de manera anidada para que sirva de valor en otra sentencia en el foro de Bases de Datos General en Foros del Web. Veréis, lo que quiero es poner varias sentencias todas dentro de una transacción. La primera sentencia de todas, quiero saber qué valor de id tiene, ...
  #1 (permalink)  
Antiguo 04/09/2005, 20:34
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
Usar SELECT @@IDENTITY de manera anidada para que sirva de valor en otra sentencia

Veréis, lo que quiero es poner varias sentencias todas dentro de una transacción. La primera sentencia de todas, quiero saber qué valor de id tiene, ya que lo usaré en todas las demás (que son inserts a otras tablas). Como quiero usar una transacción, quiero que la forma de obtener la id del último elemento introducido quede todo dentro de una sentencia SQL.

A mí se me había ocurrido algo así, pero me da error. Decidme cómo creéis que se haría:

DECLARE @Error int
BEGIN TRANSACTION INSERT INTO tabla_1 (id_ex, tip, campo3) VALUES (1, 'adf', 5)
SET @Error=@@ERROR select @@IDENTITY as a
IF (@Error<>0) GOTO TratarError
INSERT INTO el_de_tabl (fk_tabla_1, tip, id_el) VALUES (a, 'prueba', 1) SET @Error=@@ERROR IF (@Error<>0) GOTO TratarError COMMIT TRANSACTION TratarError: If @@Error<>0 ROLLBACK TRANSACTION

He puesto en negrita la parte problemática que no sé cómo hacer. No puedo meter el valor del @@ identity en a, pero de algún modo quiero poner dicho valor en las sentencias INSERT posteriores que hago. ¿Cómo se haría?
  #2 (permalink)  
Antiguo 05/09/2005, 15:47
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Prueba con algo como:
Código:
DECLARE @Error int, @a int
BEGIN TRANSACTION

INSERT INTO tabla_1 (id_ex, tip, campo3) VALUES (1, 'adf', 5)
IF (@@Error<>0) GOTO TratarError

SET @a = @@IDENTITY

INSERT INTO el_de_tabl (fk_tabla_1, tip, id_el) VALUES (@a, 'prueba', 1) 
IF (@Error<>0) GOTO TratarError 

COMMIT TRANSACTION 
GOTO finTran

TratarError: 
ROLLBACK TRANSACTION

finTran:
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 05/09/2005, 21:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
¡Muchas gracias! No conocía la manera de declarar variables. Lo probaré.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:43.