首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表列的唯一约束

问表列的唯一约束
EN

Stack Overflow用户
提问于 2009-03-04 08:18:12
回答 5查看 2.6K关注 0票数 1

我有一个表(其中包含数据的现有表),该表有一个列UserName。我希望这个UserName是唯一的。所以我添加了一个这样的约束:

代码语言:javascript
复制
ALTER TABLE Users 
ADD CONSTRAINT [IX_UniqueUserUserName] UNIQUE NONCLUSTERED ([UserName])

现在,我一直收到这个表中存在重复用户的错误。但我已经使用以下查询检查了数据库:

代码语言:javascript
复制
SELECT COUNT(UserId) as NumberOfUsers, UserName 
FROM Users 
GROUP BY UserName, UserId 
ORDER BY UserName

这会产生一个用户列表,所有用户都将1作为NumberOfUsers。所以没有重复的东西。但是当我检查用户名时,他失败了,我看到了以下结果:

代码语言:javascript
复制
beluga
béluga

很明显,他不能比较"e“和"é”或"è“...这就像他忽略了这些,有没有办法让sql在添加唯一键约束时不忽略这些重音。

解决方案:

谢谢你们,我已经找到解决方案了。这解决了这个问题:

代码语言:javascript
复制
ALTER TABLE Users 
ALTER COLUMN UserName nvarchar(250) COLLATE SQL_Latin1_General_CP1_CI_AS
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-04 08:22:17

在比较时,您使用的排序规则最有可能忽略大小写和重音。您需要更改排序规则。

  • Latin1_General_CI_AI忽略大小写,accents
  • Latin1_General_CI_AS不会忽略accents

SQL server排序规则名称here的列表。

票数 7
EN

Stack Overflow用户

发布于 2009-03-04 08:23:31

您的查询也按UserID分组-您不希望这样做。

使用:

代码语言:javascript
复制
SELECT COUNT(*) as NumberOfUsers, UserName 
    FROM Users 
    GROUP BY UserName 
    ORDER BY UserName

您的查询将只显示具有相同名称和相同用户ID的用户,或者,根据COUNT(*)对数据进行排序,以便显示的最后一行最有可能是麻烦制造者?

您也可能会遇到其他人建议的排序规则问题,但通常情况下,GROUP BY将是自我一致的。

票数 5
EN

Stack Overflow用户

发布于 2009-03-04 08:24:25

假设UserId是您的主键。因为它是分组依据的一部分,所以保证每个组只有一行。将"userId“列从您的group by中删除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/609676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档