在nvarchar列上创建SQL Server索引

时间:2010-04-27 01:21:29

标签: sql-server indexing

当我运行此SQL语句时:

  

在单词上创建独特的索引WordsIndex(Word ASC);

我收到以下异常消息:

  

CREATE UNIQUE INDEX语句终止,因为找到了对象名称“dbo.Words”和索引名称“WordsIndex”的重复键。重复键值为(ass)。   声明已经终止。

'Word'列的数据类型为nvarchar(100)。

“Word”列中有两个项目,SQL Server将其解释为相同:“aß”和“ass”,这会导致索引失败。

为什么SQL Server会将这两个不同的单词解释为同一个单词?

2 个答案:

答案 0 :(得分:4)

副本是由于列的整理造成的。以下查询将告诉您正在使用的排序规则:

Select COLLATION_NAME
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_NAME = 'WordsIndex'
    And COLUMN_NAME = 'Words'

此外,在德语中,'ß'相当于'ss'。因此,如果您使用西欧整理(例如SQL_Latin1_General_CP1_CI_AS),它将知道这些是等效的。

http://en.wikipedia.org/wiki/%C3%9F

答案 1 :(得分:0)

它使用默认排序规则(其中这些单词相同)。

您需要在列的表定义中明确限定要在该列上使用的排序规则。

请参阅ALTER TABLE