Ver Mensaje Individual
  #3  
Antiguo 18-07-2011
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Reputación: 22
abelg Va por buen camino
Mira si te es lo que quieres.
Código SQL [-]
CREATE PROCEDURE [dbo].[acumula_piezas_defectuosas]
@ID_Trabajo INT, @CodDefecto INT, @NumPiezas INT, @Ret int output
AS
BEGIN
        SET IMPLICIT_TRANSACTIONS ON

        BEGIN TRY

                -- analiza si ya existen piezas en esta partida con el tipo de defecto

                SELECT * FROM DefectosTemp
                WHERE ID_Trabajo = @ID_Trabajo AND CodDefecto = @CodDefecto

                IF @@ROWCOUNT > 0

                -- si ya hay piezas con ese defecto acumula las piezas

                UPDATE DefectosTemp SET NumPiezas = NumPiezas + @NumPiezas
                WHERE ID_Trabajo = @ID_Trabajo AND CodDefecto = @CodDefecto

                ELSE

                -- el tipo de defecto es nuevo para la partida actual y por ello crea un
                -- nuevo registro

                INSERT INTO DefectosTemp
                (CodDetalle, CodInstalacion, CodDefecto, NumPiezas, ID_Trabajo)

                SELECT CodDetalle, CodInstalacion, @CodDefecto, @NumPiezas, @ID_Trabajo
                FROM TrabajosActivos WHERE ID_Trabajo = @ID_Trabajo

                COMMIT TRANSACTION
                RETURN 0 -- Operación correcta
        END TRY

        BEGIN CATCH
                ROLLBACK TRANSACTION
                RETURN -4
        END CATCH
END
-- Llamandolo de la siguiente forma
DECLARE @Ret INT
EXECUTE dbo.acumula_piezas_defectuosas :V0, :V1, :V2, @Ret Output
SELECT @Ret
Responder Con Cita