SQL Server中如何插入区分大小写的唯一约束字段值?
解决SQL Server唯一约束下插入区分大小写值的问题
问题根源是SQL Server默认使用的排序规则大多是**不区分大小写(CI)**的,比如常见的SQL_Latin1_General_CP1_CI_AS,所以唯一约束会把'a'和'A'判定为重复值。下面是两种可行的解决办法:
方法一:创建表时指定区分大小写的排序规则
在定义列的时候,直接指定带有CS(Case Sensitive,区分大小写)标识的排序规则,示例:
CREATE TABLE test1( name1 VARCHAR(100) COLLATE Latin1_General_CS_AS UNIQUE )
执行这个建表语句后,再插入'a'和'A'就不会触发唯一约束冲突了。
方法二:修改已存在表的列排序规则
如果表已经创建完成,需要先删除原有唯一约束,修改列的排序规则后重新添加约束:
-- 替换成你的表实际的唯一约束名称 ALTER TABLE test1 DROP CONSTRAINT UQ__test1__F0B6284CB05C7FE5; -- 修改列的排序规则为区分大小写 ALTER TABLE test1 ALTER COLUMN name1 VARCHAR(100) COLLATE Latin1_General_CS_AS; -- 重新添加唯一约束 ALTER TABLE test1 ADD CONSTRAINT UQ_test1_name1 UNIQUE (name1);
注:排序规则可以根据实际业务场景选择,比如中文环境可以用
Chinese_PRC_CS_AS,核心是确保排序规则包含CS标识。
内容的提问来源于stack exchange,提问作者Bala Raj Kumar K
相关产品推荐
相关产品推荐

