Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post Problemas con ROLLBACK TRANSACTION

Holas chicos de este foro, pues aca necesito una manito con este procedimiento almacenado.

Este de aqui me pincha sin problema.

Código SQL [-]
Create      procedure Actualiza_Trabajador
@IDTrabajador BIGINT,
@IDOficina BIGINT,
@Nombre VARCHAR(50),
@Apellidos VARCHAR(50),
@CI VARCHAR(11),
@Sexo VARCHAR(1),
@Identity BIGINT output,  -- Para devolver el ID

AS

if not exists(select CI from Trabajador where CI= @CI)
     begin   
      INSERT INTO Trabajador( IDOficina, Nombre, Apellidos, CI, Sexo)
      VALUES (@IDOficina, @Nombre, @Apellidos, @CI, @Sexo)

      SET @Identity = SCOPE_IDENTITY() 
     end
else 
     BEGIN
      RAISERROR ('No se admiten Trabajadores repetido. Verifique el número de CI.', 16, 1)
     END



En este llamo al procedimiento anterior y actualizo la tabla trámite diario solo si no hubo ningun error (es desir que se halla insertado correctamente los datos, fijense que verifico para que no hallan Trabajadores repetido), solo que aunque no se inserte en la tabla Trabajador aun disparandose el RAISERROR me inserta en la tabla trámite diario y pense que con el ROLLBACK TRANSACTION evitaría eso.

Código SQL [-]
CREATE     PROCEDURE ActualizaAlta

-- Parámetros de Trabajador
@IDTrabajador BIGINT,
@IDOficina BIGINT,
@Nombre VARCHAR(50),
@Apellidos VARCHAR(50),
@CI VARCHAR(11),
@Sexo VARCHAR(1),
@Identity BIGINT output,  -- Para devolver el ID

-- Parámetros de trámite diario
@IDTramite BIGINT,
@IDUsuario BIGINT,
@IDEmpresa BIGINT,
@Fecha SMALLDATETIME,

AS

SET @Identity = -1

BEGIN TRANSACTION

--Actualizamos tabla Consumidor
EXEC Actualiza_Trabajador @IDTrabajador, @IDOficina, @Nombre, @Apellidos, @CI, @Sexo, @Identity OUTPUT

--Actualizamos tabla TramiteDiario
DECLARE @HOY DATETIME
SET @HOY = GETDATE()

INSERT INTO TramiteDiario (IDTrabajador,  IDEmpresa,  IDUsuario,  Fecha) 
VALUES                   (@Identity, @IDEmpresa, @IDUsuario, @HOY)

if @@error <> 0 
   BEGIN
     ROLLBACK TRANSACTION
   END
   
else COMMIT TRANSACTION

En espera de su ayuda,
Y como simepre mil gracias de antemano,
Lo salu2
Responder Con Cita
  #2  
Antiguo 27-09-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Puedes usar TRY o en vez de usar RAISE EXCEPTION usar una variable de salida que especifique si hubo o no error y capturarlo desde el SP Padre.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Rollback Transaction con Tablas Cobol agustibaldo Tablas planas 5 18-03-2009 12:10:10
RollBack Retaining marcial Firebird e Interbase 2 18-11-2008 21:02:29
RollBack con más de una transacción kikodelphi MS SQL Server 2 12-10-2005 20:24:25
Ejecutar un rollback micayael PHP 4 22-09-2005 15:36:54
Uso adecuado de Rollback rochi Firebird e Interbase 4 20-11-2004 20:10:55


La franja horaria es GMT +2. Ahora son las 06:07:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi