Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Contraintes de clé étrangère auto-référencées et suppression

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).