当前位置:  开发笔记 > 数据库 > 正文

表列的唯一约束

如何解决《表列的唯一约束》经验,为你挑选了2个好方法。

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

ALTER TABLE Users 
ADD CONSTRAINT [IX_UniqueUserUserName] UNIQUE NONCLUSTERED ([UserName])

现在我不断收到此表中存在重复用户的错误.但是我使用以下查询检查了数据库:

SELECT COUNT(UserId) as NumberOfUsers, UserName 
FROM Users 
GROUP BY UserName, UserId 
ORDER BY UserName

这导致一个用户列表都具有1作为NumberOfUsers.所以没有重复.但是当我检查用户名失败时,我看到以下结果:

beluga
béluga

所以他显然没有比较"e"和"é"或"è"......这就像他忽略了这些,在添加唯一键约束时,sql是否有任何方法不会忽略这些重音.

解:

THX对你们我找到了解决方案.这解决了这个问题:

ALTER TABLE Users 
ALTER COLUMN UserName nvarchar(250) COLLATE SQL_Latin1_General_CP1_CI_AS

Andrew Barre.. 7

您正在使用的排序规则很可能在比较时忽略大小写和重音.您需要更改排序规则.

Latin1_General_CI_AI 忽略大小写和重音

Latin1_General_CI_AS 不会忽略口音

此处列出了SQL Server排序规则名称.



1> Andrew Barre..:

您正在使用的排序规则很可能在比较时忽略大小写和重音.您需要更改排序规则.

Latin1_General_CI_AI 忽略大小写和重音

Latin1_General_CI_AS 不会忽略口音

此处列出了SQL Server排序规则名称.



2> Jonathan Lef..:

您的查询按用户ID分组 - 您不希望这样做.

使用:

SELECT COUNT(*) as NumberOfUsers, UserName 
    FROM Users 
    GROUP BY UserName 
    ORDER BY UserName

您的查询只会显示具有相同名称和相同用户ID的用户.或者,也许,按顺序排列数据,COUNT(*)因此显示的最后一行很可能是麻烦制造者?

您可能也会像其他人建议的那样遇到排序问题,但通常情况下,GROUP BY会自我一致.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有