Partager via


MSSQLSERVER_1505

Nouveau : 17 novembre 2008

Détails

Nom du produit

SQL Server

Version du produit

9.0

Numéro de build du produit

9.00.1399.60

ID d'événement

1505

Source de l'événement

MSSQLSERVER

Composant

SQLEngine

Nom symbolique

Texte du message

L'instruction CREATE UNIQUE INDEX a été interrompue, car une clé dupliquée a été trouvée pour l'objet '%.*ls' et l'index '%.*ls'. Valeur de clé dupliquée : %ls.

Explication

Cette erreur se produit lorsque vous tentez de créer un index unique et que plusieurs lignes dans la table contiennent la valeur dupliquée spécifiée. Un index unique est créé lorsque vous créez un index et que vous spécifiez le mot clé UNIQUE ou lorsque vous créez une contrainte UNIQUE. La table ne peut pas contenir de ligne qui contient des valeurs dupliquées dans les colonnes définies dans l'index ou la contrainte.

Prenons comme exemple les données de la table Employee suivante :

LastName FirstName JobTitle HireDate

Walters

Rob

Senior Tool Designer

2004-11-19

Brown

Kevin

Marketing Assistant

NULL

Brown

Jo

Design Engineer

NULL

Walters

Rob

Tool Designer

2001-08-09

Il est impossible de créer un index unique sur les combinaisons de colonnes LastName ou LastName, FirstName à cause des valeurs dupliquées dans les lignes.

Le risque de violation d'unicité dans la colonne HireDate est moins évident. À des fins d'indexation, les valeurs NULL sont comparées comme étant égales. Par conséquent, il est impossible de créer une contrainte ou un index unique si les valeurs de clés sont des valeurs NULL dans plusieurs lignes. Avec les données ci-dessus, il est impossible de créer un index unique sur les combinaisons de colonnes HireDate ou LastName, HireDate.

Le message d'erreur 1505 retourne la première ligne qui enfreint la contrainte d'unicité. Il peut exister d'autres lignes dupliquées dans la table. Pour trouver toutes les lignes dupliquées, interrogez la table spécifiée et utilisez les clauses GROUP BY et HAVING pour signaler les lignes dupliquées. Par exemple, la requête suivante retourne les lignes dans la table Employee qui possèdent des prénoms et des noms dupliqués.

SELECT LastName, FirstName, count(*) FROM dbo.Employee GROUP BY LastName, FirstName HAVING count(*) > 1;

Action utilisateur

Considérez les solutions suivantes :

  • Ajoutez ou supprimez des colonnes dans la définition de l'index ou de la contrainte afin de créer un composite unique. Dans l'exemple précédent, l'ajout d'une colonne MiddleName à la définition de l'index ou de la contrainte pourrait résoudre le problème des valeurs dupliquées.
  • Sélectionnez les colonnes définies comme NOT NULL lorsque vous choisissez des colonnes pour un index ou une contrainte unique. Cela élimine le risque de violation d'unicité provoqué lorsque plusieurs lignes contiennent NULL dans les valeurs de clés.
  • Si les valeurs dupliquées sont issues d'erreurs de saisie des données, corrigez manuellement les données, puis créez l'index ou la contrainte. Pour plus d'informations sur la suppression des lignes dupliquées dans une table, consultez l'article 139444 : Comment faire pour supprimer des lignes en double d'une table dans SQL Server (en anglais) dans la Base de connaissances Microsoft.

Voir aussi

Autres ressources

CREATE INDEX (Transact-SQL)
Création d'index uniques
Procédure : créer des contraintes uniques (Visual Database Tools)
Création et modification des contraintes UNIQUE

Aide et Informations

Assistance sur SQL Server 2005