Acho que o que você poderia fazer é usar um
SAVEPOINT antes de tentar executar a instrução que poderia causar a violação. Se a violação ocorrer, você poderá reverter para o SAVEPOINT , mas mantenha sua transação original. Aqui está outro tópico que pode ser útil:Continuando uma transação após um erro de violação de chave primária