Contrairement à Andomar, je serais heureux d'utiliser un déclencheur - mais je ne supprimerais pas la vérification des contraintes. Si vous l'implémentez en tant que instead of
déclencheur, vous pouvez réinitialiser les autres lignes sur null avant d'effectuer la suppression proprement dite :
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)
C'est court, c'est succinct, ce ne serait pas nécessaire si SQL Server pouvait gérer les cascades de clés étrangères vers la même table (dans d'autres SGBDR, vous pourrez peut-être simplement spécifier ON DELETE SET NULL
pour la contrainte de clé étrangère, YMMV).