Eu tenho uma tabela com uma chave exclusiva que inclui uma NVARCHAR(50)
coluna (correta ou não, mas existe). Portanto, ao tentar inserir Șc
ou C
(não importa a ordem da inserção), ele quebra na segunda inserção devido a problemas de agrupamento. Aqui está o erro:
(1 linha (s) afetada) Msg 2601, Nível 14, Estado 1, Linha 16 Não é possível inserir linha de chave duplicada no objeto 'dbo.testT' com o índice exclusivo 'IX_TestT'. O valor da chave duplicada é (C).
Selecionar devoluções:
O agrupamento padrão do banco de dados é Latin1_General_CI_AS
. Passei algum tempo pensando em como resolvê-lo, sem alterar muito a estrutura já existente, mas não consigo encontrar uma maneira de começar a trabalhar. Tentei diferentes agrupamentos e combinações, tudo falha. Leia ( aqui e aqui ) sobre expansões de personagens e assim por diante, ainda emperrado. Aqui está um código de exemplo que estou usando para replicar o problema, sinta-se à vontade para modificar e recomendar qualquer coisa que possa ajudar a resolver isso.
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;