J'ai une table avec une clé unique qui comprend une NVARCHAR(50)colonne (correcte ou non, mais est là). Ainsi, lorsque vous essayez d'insérer Școu C(peu importe l'ordre de l'insert), il se casse sur le 2ème insert en raison de problèmes de classement. Voici l'erreur:
(1 ligne (s) affectée (s)) Msg 2601, niveau 14, état 1, ligne 16 Impossible d'insérer une ligne de clé en double dans l'objet 'dbo.testT' avec l'index unique 'IX_TestT'. La valeur de clé en double est (C).
Sélectionnez les retours:
Le classement par défaut de la base de données est Latin1_General_CI_AS. J'ai passé du temps à chercher comment le résoudre, sans trop modifier la structure déjà existante, mais je ne trouve pas de moyen de travailler. J'ai essayé différentes collations et combinaisons, tout échoue. Lisez ( ici et ici ) sur les extensions de personnages et ainsi de suite, toujours coincé. Voici un exemple de code que j'utilise pour répliquer le problème, n'hésitez pas à modifier et à recommander tout ce qui pourrait aider à résoudre ce problème.
CREATE TABLE testT (
[Default_Collation] [NVARCHAR] (50) COLLATE DATABASE_DEFAULT,
[Latin1_General_CI_AS] [NVARCHAR] (50) COLLATE Latin1_General_CI_AS,
[Latin1_General_CI_AI] [NVARCHAR] (50) COLLATE Latin1_General_CI_AI,
[SQL_Collation] [NVARCHAR] (50) COLLATE SQL_Latin1_General_CP1_CI_AS);
CREATE UNIQUE CLUSTERED INDEX [IX_TestT] ON [dbo].[testT] ([Default_Collation])
ON [PRIMARY]
GO
INSERT INTO testT
SELECT N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc' --COLLATE Latin1_General_CI_AS
INSERT INTO testT
SELECT N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE SQL_Latin1_General_CP1_CI_AS
SELECT * FROM testT;
DROP TABLE testT;
