Comment SqlBulkCopy contourne-t-il les contraintes de clé étrangère?

foreign-keys sqlbulkcopy sql-server

Question

J'ai utilisé SqlBulkCopy pour insérer une collection de lignes dans une table. J'ai oublié de définir une valeur entière sur les lignes. La colonne manquante est utilisée pour référencer une autre table et cela est appliqué avec une contrainte de clé étrangère.

Pour chaque ligne insérée, la valeur entière finale était zéro et zéro n'a pas identifié de ligne dans la table liée. Lorsque j'ai modifié la valeur en une valeur valide et que j'ai ensuite essayé de la remettre à zéro, elle ne l'a pas acceptée.

Ma question est donc la suivante: comment SqlBulkCopy parvient-il à laisser la base de données dans un état non valide?

Réponse acceptée

Comment SqlBulkCopy parvient-il à laisser la base de données dans un état non valide?

Il désactive les clés étrangères de la table dans laquelle vous insérez.

Oui, c'est un horrible défaut. Veillez à définir l'option CHECK_CONSTRAINTS (ou CheckConstraints pour SqlBulkCopy ) si vous pouvez vous le permettre.

De plus, il ne déclenche pas par défaut les déclencheurs, ce qui est tout aussi néfaste pour la cohérence des données. Les déclencheurs sont là pour une raison.


Réponse populaire

Par défaut, les contraintes CHECK et FOREIGN KEY sont ignorées lors de la copie en bloc. SqlBulkCopy est une classe gérée fournissant des fonctionnalités similaires à celles proposées par la commande SQL Server bcp. La commande bcp a un indicateur -h et, à moins que vous ne fournissiez l'indicateur CHECK_CONSTRAINTS, les contraintes CHECK et FOREIGN KEY sont ignorées pendant le chargement en bloc. L'article de technet indique que - http://technet.microsoft.com/en-us/library/ms162802.aspx

De même, la classe SqlBulkCopy a un constructeur qui accepte l’énumération SqlBulkCopyOptions. Vous devez définir les options CHECKCONSTRAINTS ENUM pour assurer la vérification des contraintes - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions(v=vs.110).aspx

Voici un article sur le contrôle de la vérification des contraintes - http://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx

J'espère que cela t'aides.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi