A differenza di Andomar, sarei felice di usare un trigger, ma non rimuoverei il controllo dei vincoli. Se lo implementi come instead of
trigger, puoi reimpostare le altre righe su null prima di eseguire l'eliminazione effettiva:
CREATE TRIGGER T_tabData_D
on tabData
instead of delete
as
set nocount on
update tabData set fiData = null where fiData in (select idData from deleted)
delete from tabData where idData in (select idData from deleted)
È breve, è conciso, non sarebbe necessario se SQL Server potesse gestire cascate di chiavi esterne nella stessa tabella (in altri RDBMS', potresti essere in grado di specificare semplicemente ON DELETE SET NULL
per il vincolo di chiave esterna, YMMV).