更改列排序规则-唯一索引重复

问题描述 投票:0回答:1

最近,我在字符串比较方面遇到问题,包括SQL Server数据库中的表情符号,因此我将整个数据库的排序规则从SQL_Latin1_CP1_CI_AS更改为Latin1_General_100_CI_AS。

我知道所有现有的表/列仍然保留旧的排序规则,因此我必须手动更改它们。在使用复杂的主键更改表之一时:[KeyA (int), KeyB (nvarchar(100))],遇到此错误:

CREATE UNIQUE INDEX语句终止,因为找到了对象名称'dbo.MyTable'和索引名称'PK_MyTable'的重复键。重复的键值为(7792,#صلح‌گرا)。

我试图通过2个键对SELECT组执行count(*),但似乎没有找到任何合法的重复项。我应该怎么做才能解决以上问题?

编辑:

以下查询无结果,因为在更改排序规则之前我已经安装了PK对:

SELECT KEYA, KEYB, COUNT(*)
FROM MYTABLE
GROUP BY KEYA, KEYB
HAVING COUNT(*) > 1
sql-server ssms collation
1个回答
1
投票

正如Dale所述,您正在该group by查询中使用旧排序规则。

使用COLLATE更改为查询的新排序规则并检查重复项。

SELECT KEYA COLLATE Latin1_General_100_CI_AS, 
       KEYB COLLATE Latin1_General_100_CI_AS, 
       COUNT(*)
FROM MYTABLE
GROUP BY KEYA COLLATE Latin1_General_100_CI_AS, 
         KEYB COLLATE Latin1_General_100_CI_AS
HAVING COUNT(*) > 1
© www.soinside.com 2019 - 2024. All rights reserved.