Creo que lo que podrías hacer es usar un SAVEPOINT antes de intentar ejecutar la declaración que podría causar la violación. Si se produce la infracción, podría volver al SAVEPOINT , pero conserve su transacción original.
Aquí hay otro hilo que puede ser útil:Continuing una transacción después de un error de violación de la clave principal