2010-04-27 6 views
2

Quand je lance cette instruction SQL:index SQL Server sur une colonne nvarchar

UNIQUE INDEX CREATE WordsIndex sur les mots (Word ASC);

Je reçois le message d'exception suivante:

L'instruction CREATE UNIQUE INDEX terminée car une clé en double a été trouvé pour le nom de l'objet 'de dbo.Words' et le nom d'index 'WordsIndex'. La valeur de la clé en double est (ass). La déclaration a été terminée.

La colonne 'Word' a un type de données de nvarchar (100).

La colonne 'Word' comporte deux éléments que SQL Server interprète de la même façon: 'aß' et 'ass', ce qui provoque l'échec de l'indexation.

Pourquoi SQL Server interpréterait-il ces deux mots différents comme le même mot?

+1

sonne comme une question de devoirs? – keith

Répondre

4

Le duplicata est dû à la collation de la colonne. La requête suivante vous indiquera le classement utilisé:

Select COLLATION_NAME 
From INFORMATION_SCHEMA.COLUMNS 
Where TABLE_NAME = 'WordsIndex' 
    And COLUMN_NAME = 'Words' 

En outre, en allemand, « ß » équivaut à « ss ». Ainsi, si vous utilisez un classement en Europe de l'Ouest (par exemple SQL_Latin1_General_CP1_CI_AS), il saura que ceux-ci sont équivalents.

http://en.wikipedia.org/wiki/%C3%9F

0

Il utilise le classement par défaut (dans lequel ces mots correspondent à la même chose).

Vous devez explicitement qualifier le classement que vous souhaitez utiliser sur cette colonne, dans la définition de table de la colonne.

Voir ALTER TABLE

Questions connexes