Tengo una tabla con una clave única que incluye una NVARCHAR(50)
columna (correcta o no, pero está ahí). Entonces, cuando intenta insertar Șc
o C
(no importa el orden de la inserción) se rompe en la segunda inserción debido a problemas de intercalación. Aquí está el error:
(1 fila (s) afectada) Msg 2601, Nivel 14, Estado 1, Línea 16 No se puede insertar una fila de clave duplicada en el objeto 'dbo.testT' con el índice único 'IX_TestT'. El valor clave duplicado es (C).
Seleccionar devoluciones:
La clasificación predeterminada de la base de datos es Latin1_General_CI_AS
. Pasó algún tiempo buscando cómo resolverlo, sin cambiar demasiado la estructura ya existente, pero no puede encontrar la manera de trabajar. Intenté diferentes colaciones y combinaciones, todo falla. Lea ( aquí y aquí ) sobre expansiones de personajes, etc., aún atascado. Aquí hay un código de muestra que estoy usando para replicar el problema, siéntase libre de modificar y recomendar cualquier cosa que pueda ayudar a resolver esto.
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;