最近,我在字符串比较方面遇到问题,包括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
正如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