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