Contôle de la vérification des contraintes par les opérations d'importation en bloc

Mis à jour : 12 décembre 2006

Lors d'une importation en bloc de données, vous pouvez décider d'imposer l'application des contraintes CHECK et FOREIGN KEY par l'opération d'importation en bloc. Une contrainte est une règle métier qui est placée dans une colonne dans le but d'en définir les valeurs valides ; par exemple, une contrainte de colonne contenant des numéros de postes pourra-t-elle exiger le format ####. La définition de contraintes et leur vérification consistent en un mécanisme classique qui vise à assurer l'intégrité des données. Microsoft recommande d'utiliser la vérification des contraintes lors d'une importation en bloc incrémentielle.

Dans certains cas, vous souhaiterez peut-être ignorer les contraintes. Un tel scénario peut s'envisager si vos données d'entrée contiennent des lignes qui violent des contraintes. En ignorant les contraintes, vous pouvez charger les données puis utiliser des instructions Transact-SQL pour nettoyer ces données.

Si la table n'était pas vide avant l'opération d'importation en bloc, il revient plus cher de valider à nouveau la contrainte que d'appliquer des contraintes CHECK et FOREIGN KEY aux données incrémentielles. Une fois les données problématiques importées, vous devez utiliser Transact-SQL pour nettoyer les données importées.

ms186247.note(fr-fr,SQL.90).gifImportant :
Lorsque les contraintes sont désactivées, un verrou de modification de schéma peut être appliqué pour mettre à jour les métadonnées. Cela peut interférer avec d'autres commandes (de contruction d'index en ligne, par ex.) ou transactions. Par exemple, une transaction d'isolement de capture instantanée accédant à la table cible peut échouer à cause de modifications de DDL simultanées.

Pour plus d'informations sur les contraintes, consultez Contraintes.

Lors d'une opération d'importation en bloc, le comportement du contrôle des contraintes varie en fonction de la commande utilisée pour l'opération. Par défaut, la commande bcp et l'instruction BULK INSERT ignorent les contraintes. À l'inverse, l'instruction INSERT ... SELECT * FROM OPENROWSET(BULK...) contrôle les contraintes par défaut.

Le tableau suivant résume le comportement par défaut de la vérification des contraintes en fonction des commandes d'importation en bloc.

Commande Comportement par défaut

bcp

Ignore les contraintes

BULK INSERT

Ignore les contraintes

INSERT ... SELECT * FROM OPENROWSET(BULK...)

Vérifie les contraintes

Chaque commande d'importation en bloc fournit un qualificateur qui permet de modifier la façon dont les contraintes sont traitées, comme expliqué dans les sections suivantes.

Vérification des contraintes avec bcp ou BULK INSERT

Par défaut, les contraintes sont ignorées lors d'une opération d'importation en bloc exécutée via la commande bcp ou l'instruction BULK INSERT.

La commande bcp et l'instruction BULK INSERT permettent de préciser que les contraintes doivent être appliquées lors d'une opération d'importation en bloc. Si l'application des contraintes a pour effet de ralentir l'opération d'importation en bloc, elle apporte néanmoins la garantie que l'ensemble des données insérées ne violent pas les contraintes existantes. Le tableau suivant récapitule les qualificateurs que vous pouvez utiliser pour spécifier l'application des contraintes lors d'une opération d'importation en bloc.

Commande Qualificateur Type de qualificateur

bcp

-h"CHECK_CONSTRAINTS"

Indicateur

BULK INSERT

CHECK_CONSTRAINTS

Argument

Pour plus d'informations, consultez Utilitaire bcp et BULK INSERT (Transact-SQL).

Désactivation du contrôle des contraintes dans INSERT ... SELECT * FROM OPENROWSET(BULK...)

Par défaut, INSERT vérifie les contraintes CHECK et FOREIGN KEY. Cependant, l'instruction INSERT ... SELECT * FROM OPENROWSET(BULK...) vous permet de passer outre la vérification des contraintes CHECK et FOREIGN KEY. .

ms186247.note(fr-fr,SQL.90).gifRemarque :
Vous ne pouvez pas désactiver les contraintes UNIQUE, PRIMARY KEY, ou NOT NULL.

Le tableau suivant présente l'indicateur de table utilisé pour ignorer les contraintes CHECK et FOREIGN KEY.

Commande Qualificateur Type de qualificateur

INSERT ... SELECT * FROM OPENROWSET(BULK...)

WITH (IGNORE_CONSTRAINTS)

Indicateur de table

L'exemple suivant illustre la façon dont cet indicateur est utilisé. Pour plus d'informations sur l'indicateur IGNORE_CONSTRAINTS, consultez Indicateur de table (T-SQL).

Vérification des données importées

Si vous ignorez les contraintes lors d'une opération d'importation en bloc, les données qui violent les contraintes existantes peuvent être insérées dans la table. Ainsi, chaque contrainte ignorée placée dans la table est marquée is_not_trusted dans l'affichage catalogue sys.check_constraints ou sys.foreign_keys. À un point donné, vous devez vérifier les contraintes sur toute la table.

Vous pouvez identifier les lignes importées de la table qui violent les contraintes en vérifiant manuellement les données importées à l'aide des requêtes ou des procédures stockées Transact-SQL qui testent les conditions de la contrainte.

Voir aussi

Autres ressources

Utilitaire bcp
BULK INSERT (Transact-SQL)
DBCC CHECKCONSTRAINTS (Transact-SQL)
INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
Indicateur de table (T-SQL)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Contenu modifié :
  • Révision de la rubrique pour indiquer que les contraintes CHECK et FOREIGN KEY se contrôlent en même temps.