Como lo comento el compañero iislas, primero se debe borrar la cuenta ya que para cuando busca la cuenta del titular, ya habias eliminado el titular y no encuentra nada....
Adicional, el codigo de error @@Error se reemplaza cada vez que se ejecuta una operacion, es por eso que hay que manejarlo de forma acumulativa si es que se va a evaluar al final...
Código:
CREATE PROCEDURE dbo.EliminarClientes @Ci int
AS
DECLARE @Error int, @cuenta int
If (SELECT count(1) FROM clientes WHERE ci=@ci) > 0
BEGIN
RETURN 0;
END
ELSE
BEGIN
BEGIN TRAN
Delete clientes where ci=@ci;
SET @Error = @@ERROR;
-- Primero se debe eliminar la cuenta, para que se busque la cuenta
-- que tiene asignado el titular.
if (SELECT cuenta FROM titular WHERE ci = @ci) > 0
Begin
DELETE cuentas
WHERE cuenta = (SELECT cuenta FROM titular WHERE ci = @ci)
Set @Error = @Error + @@ERROR;
End
If (Select count(1) from Titular Where ci = @ci) > 0
Begin
Delete Titular where ci=@ci;
Set @Error = @Error + @@ERROR;
Else
End
If (Select count(1) from Personas Where ci = @ci) > 0
Begin
Delete Personas WHERE ci = @ci;
Set @Error = @Error + @@ERROR;
End
IF(@Error = 0)
BEGIN
COMMIT TRAN;
RETURN 0;
END
ELSE
BEGIN
ROLLBACK TRAN;
RETURN 1;
END
END
GO
Saludos!