2017-10-17 5 views
0

j'ai 3 tables:Supprimer enregistrement de la table multiple avec des clés étrangères dans SQL Server

  • post
  • Comme
  • Commentaire

Relation entre les tables sont:

  • Tableau du tableau: postid PK
  • Comme le tableau: LikeID PK, postID FK, CommentID FK
  • table Commentaire: CommentID PK, PostID FK, CommentReplybyID FK (Auto rejoindre sur CommentID)

Maintenant, je dois supprimer le message de la table de poste, mais je Je reçois une erreur.

J'utilise cette requête ci-dessous:

begin tran 

declare @userid int = 68; 
declare @postid int = 15; 

delete from likes 
where postid = @postid and userid = @userid 

delete from comments 
where postid = @postid and userid = @userid 

delete from post 
where postid = @postid and userid = @userid 

rollback tran 

Je reçois ces erreurs:

Msg 547, niveau 16, état 0, ligne 8
L'instruction DELETE en conflit avec la même table REFERENCE contrainte "Comments_fk3". Le conflit s'est produit dans la base de données "development-topthat", la table "dbo.Comments", la colonne "CommentReplyID". Msg 547, niveau 16, état 0, ligne 9
L'instruction DELETE était en conflit avec la contrainte REFERENCE "Likes_fk1" Le conflit s'est produit dans la base de données "development-topthat", la table "dbo.Likes", la colonne "PostID".

J'ai besoin d'aide lorsque je fais mal. Comment y parvenir?

+0

Vous avez des contraintes de clé étrangère que vous avez à traiter. – ivan7707

+0

oui je sais, mais comment? –

Répondre

0

Par les regards du CommentReplyID et du commentaire d'auto-jointure, je suppose que vous avez une relation imbriquée quelconque dans la table des commentaires.

Vous aurez besoin de supprimer les enregistrements où le CommentReplyId correspond aux commentaires de votre suppression.

begin tran 

declare @userid int = 68; 
declare @postid int = 15; 

-- are you sure userid should be used here? 
delete from likes where postid = @postid and userid = @userid 

delete from comments c1 join comments c2 on c2.CommentReplyId = c1.CommentId where c1.postid = @postid and c1.userid = @userid 

delete from comments where postid [email protected] and userid = @userid 

delete from post where postid = @postid and userid = @userid 

rollback tran 
+0

qu'en est-il de l'erreur postID sur une table similaire? –

+0

Essayez de faire l'auto-jointure supprimer de 'commentaire' d'abord, j'imagine que la dernière erreur pourrait disparaître. Alternativement, je soupçonne que vous pourriez avoir des enregistrements dans la table likes pour ce 'postid' où' userid' est quelque chose de différent. – pimbrouwers