390 votes

Comment utiliser la suppression en cascade avec SQL Server ?

J'ai 2 tables : T1 et T2, ce sont des tables existantes avec des données. Nous avons une relation un à plusieurs entre T1 et T2. Comment puis-je modifier les définitions de table pour effectuer une suppression en cascade dans SQL Server lorsqu'un enregistrement de T1 est supprimé, tous les enregistrements associés dans T2 sont également supprimés.

La contrainte étrangère est en place entre eux. Je ne veux pas supprimer les tables ou créer un déclencheur pour effectuer la suppression pour T2. Par exemple, lorsque je supprime un employé, tous les enregistrements de révision doivent également disparaître.

T1 - Employé,

Employee ID      
Name
Status

T2 - Examens de performance,

Employee ID - 2009 Review
Employee ID - 2010 Review

16voto

ravula sandeep Points 19

D'abord pour activer la propriété ONCascade :

1. supprimer la contrainte de clé étrangère existante

2.ajouter un nouveau avec le paramètre ON DELETE CASCADE activé

Ex :

IF EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Response'))
 BEGIN 

ALTER TABLE [dbo].[Response] DROP CONSTRAINT [FK_Response_Request]  

ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request]  FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE CASCADE
END

ELSE

 BEGIN 
 ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request]  FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE CASCADE
END

Deuxièmement pour désactiver la propriété ONCascade :

1. supprimer la contrainte de clé étrangère existante

2. ajouter un nouveau avec le paramètre ON DELETE NO ACTION activé

Ex :

IF EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Response'))
 BEGIN 
ALTER TABLE [dbo].[Response] DROP CONSTRAINT [FK_Response_Request]  

ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request]  FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE CASCADE
END

ELSE

 BEGIN 
 ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request]  FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE NO ACTION 
END

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X