Si no puedes modificar el código de la aplicación que inserta los datos, tienes dos opciones:
1. Como bien dices, crear un trigger que actualice el campo fallo cuando se inserta en el campo error y actualice el campo error cuando se inserta en el campo fallo, de esta manera la página web solo tiene que consultar un campo para realizar los informes.
Código:
create table t1 (id int, fallo varchar(10), error varchar(10))
go
create trigger trg1 on t1 after insert
as
begin
if (select error from inserted) is null
update t1
set t1.error = i.fallo
from inserted i
where t1.id = i.id
else
update t1
set t1.fallo = i.error
from inserted i
where t1.id = i.id
end
go
insert into t1 values (1, 'fallo1', null)
insert into t1 values (1, null, 'error1')
go
select id, error from t1
go
2. Modificar la página web para que consulte el campo error o el campo fallo en función de los valores nulos.
Código:
create table t1 (id int, fallo varchar(10), error varchar(10))
go
insert into t1 values (1, 'fallo1', null)
insert into t1 values (1, null, 'error1')
go
select
id,
errores = case
when fallo is not null then fallo
when error is not null then error
else 'sin datos'
end
from t1
go
El rendimiento dependerá de varios factores, la primera opción te favorece si el campo t1.id es pk o unique y los reportes se hacen con funciones de agregado (ej: count(error) o group by error), y la segunda opción te favorece si la tabla no tiene una pk y los reportes no suman o agrupan la cantidad de errores.
Saludos