2010-10-29 5 views
0

Je travaille sur la création d'une base de données de développement pour mon patron. J'ai le script SQL qui crée toutes les tables, mais maintenant j'ai beaucoup de données à importer. Il y a 5 tables dans la base, et leur identité de sont liés à eachother comme ceci:SQL Management Studio Insérer une instruction conflict

Note: Je ne suis pas autorisé à partager des informations comme les noms base de données/tables

Table1 
+-- Table2 
    +-- Table3 
     +-- Table4 
      +-- Table5 

Ce qui signifie que Table 5 a un champ qui pointe vers l'ID de Table 4, et ainsi de suite.

Je fais un tas d'inserts comme ceci:

INSERT INTO [dbo].[Table2] (Table1_ID, AnotherField) VALUES (159268, 408659) 

Mais il jette cette exception pour chacun:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_TABLE2_TABLE1". The conflict occurred in database "--removed by author--", table "dbo.TABLE1", column 'TABLE1_ID'. 

EDIT: Le problème était que je nécessaire pour insérer les données dans le tableau 1 en premier. Donc, mon patron a trouvé quelques données qui suffisent pour ... Tableau 1 Alors Problème résolu :)

+0

Veuillez insérer les données dans TABLE1, puis TABLE2 ... – garik

+0

Mais il n'y a pas de données pour 'TABLE1' ... – Entity

Répondre

1

Il n'y a pas vraiment grand chose à ajouter - le message d'erreur est assez clair.

Vous essayez d'insérer une valeur d'ID dans la table 2, mais cette valeur d'ID n'existe pas dans le tableau 1. D'où le message d'erreur.

Vous devez insérer les données à insérer Table1 avant pour Tableau2

EDIT:

S'il n'y a pas de données pour les contraintes Tableau1 alors la base de données sont mal pensés. Vous devrez supprimer la contrainte de Table2.

Vous devrez leur demander les données pour Table1 puis.

+0

Nous sommes en train de reconstruire la base de données d'une société dans SQL Management Studio. données pour les tableaux 2, 4 et 5 – Entity

0
  1. Vous devriez faire un top-down importation: d'abord importer tous les enregistrements de Table1, puis Table2, etc.
  2. Ou Pour faciliter les choses et avoir une expérience plus rapide, vous pouvez désactiver toutes vos contraintes avant de les exécuter et les réactiver après leur exécution. S'il vous plaît, jetez un coup d'oeil ici: How can foreign key constraints be temporarily disabled using T-SQL?

EDIT:

Eh bien, si vous ne disposez pas de données Table1 tout ce que vous pouvez faire est de retirer toutes les contraintes de clé étrangère qui font référence à Table1 (probablement de Table2). Ou vous pouvez essayer de générer "faux" Table1 données, compte tenu de tous les ID Table1 distincts disponibles sur Table2 (aaarrgh).

0

Vous pouvez désactiver temporairement la contrainte de clé étrangère, effectuer l'insertion, puis la réactiver en utilisant CHECK et NOCHECK.

WITH NOCHECK CONSTRAINT désactive la contrainte et autorise une insertion qui violerait normalement la contrainte.

WITH CHECK CONSTRAINT ré-active la contrainte.

Voici un detailed explanation sur la façon de procéder.

Questions connexes