Selon MSDN, les déclencheurs sont utiles pour "Étendre l'intégrité référentielle entre les tables"., ce qui est exactement ce que vous essayez de faire. Il suffit donc d'utiliser un déclencheur FOR UPDATE
et d'élever une erreur si l'ancienne valeur n'était pas null mais que la nouvelle valeur l'était.
En supposant que vous avez une colonne nullable de type int appelé SomeId
et votre table est appelée SomeTable
le déclencheur suivant ferait le travail:
CREATE TRIGGER CheckTrigger ON SomeTable
FOR UPDATE
AS
DECLARE @OldId int,
@NewId int
BEGIN
SELECT @OldId = SomeId FROM deleted
SELECT @NewId = SomeId FROM inserted
IF NOT @OldId IS NULL AND @NewId IS NULL
BEGIN
RAISERROR ('No!!!!', 10,1) WITH NOWAIT
ROLLBACK TRANSACTION
END
END;