2010-12-15 187 views
18

J'ai un tableau représentant les utilisateurs. Lorsqu'un utilisateur est supprimé, je reçois:Comment modifier une table pour activer CASCADE DELETE?

instruction DELETE en conflit avec la contrainte RÉFÉRENCE

Apparemment, CASCADE DELETE est pas aussi facile que je l'imaginais dans SQL Server et l'option doit être ajoutée à la table.

Le problème est: je n'arrive pas à comprendre comment ajouter l'option CASCADE DELETE. J'utilise: SQL Server 2008. Des idees pour faire cela?

Répondre

25

Lire cet article Microsoft. Read Me. J'utilise l'interface graphique lors de la conception, donc voici une photo de la façon dont il est sélectionné dans SSMS. alt text La syntaxe ajoutée à la clé étrangère est « ON SUPPRIMER CASCADE »

17

Google ALTER TABLE DROP CONSTRAINT, puis ALTER TABLE ADD CONSTRAINT:

ALTER TABLE

Voici un exemple rapide:

CREATE TABLE A 
(
ID INTEGER NOT NULL UNIQUE 
); 

CREATE TABLE B 
(
ID INTEGER NOT NULL UNIQUE 
    CONSTRAINT fk__B__A 
     REFERENCES A (ID) 
); 

-- Oops! Forgot the CASCADE referential actions. 
-- DROP the constraint then recreate it: 

ALTER TABLE B DROP 
    CONSTRAINT fk__B__A; 

ALTER TABLE B ADD 
    CONSTRAINT fk__B__A 
     FOREIGN KEY (ID) 
     REFERENCES A (ID) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE; 
+1

Je pense que RadiantHex veut dire que RadiantHex veut supprimer les lignes associées à la contrainte en utilisant des suppressions en cascade ne pas supprimer les contraintes afin que les lignes puissent être supprimées. –

+4

@Mark Schultheiss: Je pense que ce que TA veut dire est que TA suggère que la contrainte ne peut pas être modifiée (c'est-à-dire qu'il n'y a pas de syntaxe 'ALTER TABLE..ALTER CONSTRAINT'), la contrainte doit être supprimée puis recréée. J'ai ajouté un exemple pour plus de clarté. – onedaywhen

9

Voici la façon dont j'ajouterais la « suppression en cascade » à une fonction existante clé étrangère dans SQL Server Management Studio. Tout d'abord, trouvez votre clé étrangère, et ouvrez-le "DROP et CREATE To" dans une nouvelle fenêtre de requête.

Drop and Create

Ensuite, il suffit d'ajouter "ON DELETE CASCADE" à la commande "ADD CONSTRAINT":

On delete cascade

Ensuite vient de frapper cliquez sur le bouton "Exécuter" pour exécuter la requête.

Travail effectué!