2012-12-22 4 views
2

Nous avons une table qui a beaucoup de lignes. Je veux créer une clé étrangère entre ces deux tables mais Je reçois l'erreur suivante.Confilitre de clé étrangère SQL Server 2008

La table 'CMEvent' a bien été enregistrée;
Table 'BaseEvent'
Impossible de créer la relation 'FK_CMEvent_Oid'.
L'instruction ALTER TABLE était en conflit avec la contrainte FOREIGN KEY "FK_CMEvent_Oid". Le conflit a eu lieu dans la base de données « CMO_RestoredData », table « dbo.BaseEvent », colonne Oid'.`

+2

Pouvez-vous afficher la définition complète des deux tables? Avez-vous vérifié que la table enfant contient uniquement les ID réellement présents dans la table parente? – SchmitzIT

+1

Vague question, mais normalement, cela signifierait que vous essayez d'ajouter une clé étrangère où une contrainte est violée parce que la deuxième table ne contient pas une relation requise. Poster plus de détails et quelqu'un pourrait être en mesure de vous aider avec une requête pour trouver les données manquantes. – PeterJ

+0

Ceci est un morceau de ma table BaseEvent http://screencast.com/t/Hteavy0G c'est ma table CMEvent http://screencast.com/t/IMK0Mgkv –

Répondre

0

j'ai pu reproduire cette erreur lorsque j'ai eu une ligne dans la table CMEvent qui n'existait pas dans BaseEvent.

Essayez d'exécuter cette requête:

SELECT * 
FROM CMEvent c 
WHERE NOT EXISTS (
    SELECT * 
    FROM BaseEvent 
    WHERE oid = c.oid) 

Si vous obtenez toutes les lignes de retour, ceux-ci devront être supprimés avant de pouvoir appliquer la contrainte de clé étrangère.

Si vous devez conserver ces lignes orphelines, vous pouvez utiliser WITH NOCHECK pour appliquer uniquement la contrainte aux nouvelles lignes.

Questions connexes