Cómo evitar actualizaciones a una tabla, con una excepción para una situación

Tengo una tabla que contiene registros que pueden convertirse en parte de una factura. Puedo decir cuáles ya son parte de una factura porque la tabla tiene una columna BillId que se actualiza por el código de la aplicación cuando eso sucede. Quiero evitar actualizaciones a cualquier registro que tenga un BillId no nulo. Estoy pensando que lo siguiente debería encargarse de eso:

CREATE TRIGGER [Item_Update_AnyBilled]
ON [dbo].[Item]
FOR UPDATE
AS 
BEGIN
SET NOCOUNT ON;
DECLARE @AnyBilled BIT;

SELECT  TOP(1) @AnyBilled = 1
  FROM  inserted i
        JOIN deleted d ON i.ItemId = d.ItemId
 WHERE  d.BillId IS NOT NULL; 

IF COALESCE(@AnyBilled, 0) = 1 BEGIN
    RAISERROR(2870486, 16, 1);  -- Cannot update a record that is part of a bill.
    ROLLBACK TRANSACTION;
END;
END;

Sin embargo, hay una arruga más. La tabla Item también tiene una columna DATETIME Modified y un activador que la actualiza.

CREATE TRIGGER [dbo].Item_Update_Modified 
ON  [dbo].[Item] 
AFTER UPDATE
AS 
BEGIN
SET NOCOUNT ON;

UPDATE a
   SET Modified = getdate()
  FROM Item a JOIN inserted i ON i.ItemId = a.ItemId
END

Con estos desencadenantes en su lugar, agregar un artículo a un proyecto de ley siempre hace que se active el RAISERROR. Presumiblemente porque cuando se llena el BillId, Item_Update_AnyBilled lo deja pasar porque el Delete.BillId es NULL, pero el Item_Update_Modified se ejecuta, y ese cambio secundario hace que Item_Update_AnyBilled se ejecute nuevamente, y esta vez eliminado.BillId ya no es NULL.

¿Cómo puedo evitar actualizaciones en la tabla Elemento, excepto en el caso de que se complete el BillId o cuando el único cambio sea en la columna Modificado?

Prefiero una solución que no requiera que compare los valores insertados y eliminados de cada columna (o use COLUMNS_UPDATED ()) ya que eso crearía un problema de mantenimiento (alguien tendría que recordar actualizar el activador cada vez que nueva columna se agrega o se elimina de la tabla). Estoy usando SQL Server 2005.

Respuestas a la pregunta(2)

Su respuesta a la pregunta