NVARCHAR(50)
列を含む一意のキーを持つテーブルがあります(正しいかどうかはわかりますが、あります)。そのため、挿入しようとすると、Șc
またはC
(挿入の順序は関係ありません)、照合の問題により2番目の挿入で中断します。ここにエラーがあります:
(1行が影響を受けました)メッセージ2601、レベル14、状態1、行16一意のインデックス 'IX_TestT'を持つオブジェクト 'dbo.testT'に重複するキー行を挿入できません。重複するキーの値は(C)です。
返品を選択:
データベースのデフォルトの照合はLatin1_General_CI_AS
です。既存の構造をあまり変更せずに、その解決方法をしばらく探しましたが、機能する方法を見つけることができませんでした。さまざまな照合順序と組み合わせを試しましたが、すべて失敗します。まだ展開されていないキャラクターの展開などについて(こことここ)を読んでください。これは、問題を再現するために使用しているサンプルコードです。自由に変更し、これを解決するのに役立つと思われるものをお勧めします。
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;