Ao contrário do Andomar, eu ficaria feliz em usar um gatilho - mas não removeria a verificação de restrição. Se você implementá-lo como um
instead of
trigger, você pode redefinir as outras linhas para null antes de executar a exclusão real: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)
É curto, é sucinto, não seria necessário se o SQL Server pudesse lidar com cascatas de chave estrangeira para a mesma tabela (em outros RDBMS', você pode apenas especificar
ON DELETE SET NULL
para a restrição de chave estrangeira, YMMV).